initial chekin of code received by Ericsson on 20170410
diff --git a/COMMON/ProtocolModules_Common.tpd b/COMMON/ProtocolModules_Common.tpd
new file mode 100644
index 0000000..f861d7b
--- /dev/null
+++ b/COMMON/ProtocolModules_Common.tpd
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               ProtocolModules_Common.tpd
+   Description:        tpd project file
+   Rev:                R9A
+   Prodnr:             CNL 113 368
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>ProtocolModules_Common</ProjectName>
+  <Files>
+    <FileResource projectRelativePath="General_Types.ttcn" relativeURI="src/General_Types.ttcn"/>
+    <FileResource projectRelativePath="MobileDomainDefinitions.asn" relativeURI="src/MobileDomainDefinitions.asn"/>
+    <FileResource projectRelativePath="UsefulTtcn3Types.ttcn" relativeURI="src/UsefulTtcn3Types.ttcn"/>
+    <FileResource projectRelativePath="XSD.ttcn" relativeURI="src/XSD.ttcn"/>
+    <FileResource projectRelativePath="general_typedefs.ttcn" relativeURI="src/general_typedefs.ttcn"/>
+    <FileResource projectRelativePath="http_www_w3_org_XML_1998_namespace.ttcn" relativeURI="src/http_www_w3_org_XML_1998_namespace.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/ProtocolModules_Common</targetExecutable>
+          <addSourceLineInfo>true</addSourceLineInfo>
+          <buildLevel>Level3-Creatingobjectfileswithdependencyupdate</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/COMMON/doc/documentation_note.txt b/COMMON/doc/documentation_note.txt
new file mode 100644
index 0000000..615d818
--- /dev/null
+++ b/COMMON/doc/documentation_note.txt
@@ -0,0 +1,13 @@
+Please note that the storage of the documentation of the product has been 
+moved to the eridoc.ericsson.se from the ClearCase.
+
+You can access the documentation of the product via the following links:
+
+The documentation belongs to the R9A revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113368&Rev=K&Lang=EN&PRev=Y
+
+The documentation belongs to the latest revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113368&Rev=HIGHEST&Lang=EN&Status=FREE&PRev=Y
+
diff --git a/COMMON/src/General_Types.ttcn b/COMMON/src/General_Types.ttcn
new file mode 100644
index 0000000..bd2dc54
--- /dev/null
+++ b/COMMON/src/General_Types.ttcn
@@ -0,0 +1,382 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               General_Types.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:
+
+module General_Types
+{
+
+group SimpleNativeTypes {
+
+  //****************************************************
+  // Bitstrings
+  //****************************************************
+
+  //bitstring with fixed length
+  type bitstring BIT1n length(1) with { variant "" };
+  type bitstring BIT2n length(2) with { variant "" };
+  type bitstring BIT3n length(3) with { variant "" };
+  type bitstring BIT4n length(4) with { variant "" };
+  type bitstring BIT5n length(5) with { variant "" };
+  type bitstring BIT6n length(6) with { variant "" };
+  type bitstring BIT7n length(7) with { variant "" };
+  type bitstring BIT8n length(8) with { variant "" };
+  type bitstring BIT9n length(9) with { variant "" };
+  type bitstring BIT12n length(12) with { variant "" };
+  type bitstring BIT14n length(14) with { variant "" };
+  type bitstring BIT15n length(15) with { variant "" };
+  type bitstring BIT16n length(16) with { variant "" };
+  type bitstring BIT56n length(56) with { variant "" };
+
+  //bitstring with length interval
+  type bitstring BIT14_24n length(14..24) with { variant "" };
+
+  //bitstring to be padded with fixed length
+  type bitstring BIT1np length(1) with { variant "" };
+  type bitstring BIT2np length(2) with { variant "" };
+  type bitstring BIT3np length(3) with { variant "" };
+  type bitstring BIT4np length(4) with { variant "" };
+  type bitstring BIT5np length(5) with { variant "" };
+  type bitstring BIT6np length(6) with { variant "" };
+  type bitstring BIT7np length(7) with { variant "" };
+  type bitstring BIT15np length(15) with { variant "" };
+
+  //bitstring with fixed length
+  type bitstring BIT1 length(1) with { variant "FIELDLENGTH(1)" };
+  type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" };
+  type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" };
+  type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" };
+  type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" };
+  type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" };
+  type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" };
+  type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" };
+  type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" };
+  type bitstring BIT10 length(10) with { variant "FIELDLENGTH(10)" };
+  type bitstring BIT11 length(11) with { variant "FIELDLENGTH(11)" };
+  type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" };
+  type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" };
+  type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" };
+  type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
+  type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
+  type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
+  type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
+  
+  type record of bitstring Bitstrings with { variant "" };
+  type Bitstrings BitstringList;
+  type set of bitstring BitstringSet with { variant "" };
+
+  //****************************************************
+  // Octetstrings
+  //****************************************************
+
+  //octetstring with fixed length
+  type octetstring OCT0n length(0) with { variant "" };
+  type octetstring OCT1n length(1) with { variant "" };
+  type octetstring OCT2n length(2) with { variant "" };
+  type octetstring OCT3n length(3) with { variant "" };
+  type octetstring OCT4n length(4) with { variant "" };
+  type octetstring OCT5n length(5) with { variant "" };
+  type octetstring OCT6n length(6) with { variant "" };
+  type octetstring OCT7n length(7) with { variant "" };
+  type octetstring OCT8n length(8) with { variant "" };
+  type octetstring OCT9n length(9) with { variant "" };
+  type octetstring OCT10n length(10) with { variant "" };
+  type octetstring OCT11n length(11) with { variant "" };
+  type octetstring OCT12n length(12) with { variant "" };
+  type octetstring OCT13n length(13) with { variant "" };
+  type octetstring OCT14n length(14) with { variant "" };
+  type octetstring OCT15n length(15) with { variant "" };
+  type octetstring OCT16n length(16) with { variant "" };
+  type octetstring OCT17n length(17) with { variant "" };
+  type octetstring OCT18n length(18) with { variant "" };
+  type octetstring OCT19n length(19) with { variant "" };
+  type octetstring OCT20n length(20) with { variant "" };
+  type octetstring OCT28n length(28) with { variant "" };
+  type octetstring OCT32n length(32) with { variant "" };
+  type octetstring OCT34n length(34) with { variant "" };
+  type octetstring OCT46n length(46) with { variant "" };
+  type octetstring OCT50n length(50) with { variant "" };
+  type octetstring OCT69n length(69) with { variant "" };
+  type octetstring OCT100n length(100) with { variant "" };
+  type octetstring OCT128n length(128) with { variant "" };
+  type octetstring OCT500n length(500) with { variant "" };
+  type octetstring OCTNn with { variant "" };
+
+  //octetstring with length interval
+  type octetstring OCT1_3n length(1..3) with { variant "" };
+  type octetstring OCT1_4n length(1..4) with { variant "" };
+  type octetstring OCT1_5n length(1..5) with { variant "" };
+  type octetstring OCT1_6n length(1..6) with { variant "" };
+  type octetstring OCT1_7n length(1..7) with { variant "" };
+  type octetstring OCT1_8n length(1..8) with { variant "" };
+  type octetstring OCT1_12n length(1..12) with { variant "" };
+  type octetstring OCT1_15n length(1..15) with { variant "" };
+  type octetstring OCT1_16n length(1..16) with { variant "" };
+  type octetstring OCT1_18n length(1..18) with { variant "" };
+  type octetstring OCT1_20n length(1..20) with { variant "" };
+  type octetstring OCT1_24n length(1..24) with { variant "" };
+  type octetstring OCT1_32n length(1..32) with { variant "" };
+  type octetstring OCT1_34n length(1..34) with { variant "" };
+  type octetstring OCT1_46n length(1..46) with { variant "" };
+  type octetstring OCT1_50n length(1..50) with { variant "" };
+  type octetstring OCT1_112n length(1..112) with { variant "" };
+  type octetstring OCT1_127n length(1..127) with { variant "" };
+  type octetstring OCT1_128n length(1..128) with { variant "" };
+  type octetstring OCT1_172n length(1..172) with { variant "" };
+  type octetstring OCT3_5n length(3..5) with { variant "" };
+  type octetstring OCT3_7n length(3..7) with { variant "" };
+  type octetstring OCT3_8n length(3..8) with { variant "" };
+  type octetstring OCT3_14n length(3..14) with { variant "" };
+  type octetstring OCT3_17n length(3..17) with { variant "" };
+  type octetstring OCT4_8n length(4..8) with { variant "" };
+
+  type record of octetstring Octetstrings with { variant "" };
+  type Octetstrings OctetstringList;
+  type set of octetstring OctetstringSet with { variant "" };
+
+  //****************************************************
+  // Charstrings
+  //****************************************************
+
+  //charstring with fixed length
+  type charstring CHAR4 length (4);
+
+  type record of charstring Charstrings with { variant "" };
+  type Charstrings CharstringList;
+  type set of charstring CharstringSet with { variant "" };
+
+  //****************************************************
+  // Hexstrings
+  //****************************************************
+
+  //hexstring with fixed length
+  type hexstring HEX4n length(4) with { variant "" };
+  type hexstring HEX6n length(6) with { variant "" };
+  type hexstring HEX8n length(8) with { variant "" };
+  type hexstring HEX15n length(15) with { variant "" };
+  type hexstring HEX16n length(16) with { variant "" };
+  type hexstring HEX24n length(24) with { variant "" };
+
+  //hexstring with length interval
+  type hexstring HEX0_18n length(0..18) with { variant "" };
+  type hexstring HEX1_20n length(1..20) with { variant "" };
+  type hexstring HEX1_34n length(1..34) with { variant "" };
+
+  type record of hexstring Hexstrings with { variant "" };
+  type Hexstrings HexstringList;
+  type set of hexstring HexstringSet with { variant "" };
+
+  //****************************************************
+  // Integers
+  //****************************************************
+
+  //integer with fixed bit number
+  type integer INT3nb (0..7) with { variant "" };
+  type integer INT4nb (0..15) with { variant "" };
+  type integer INT5nb (0..31) with { variant "" };
+  type integer INT8nb (0..255) with { variant "" };
+
+  //integer with fixed bit number and with padding
+  type integer INT2nbp (0..3) with { variant "" };
+  type integer INT1nbp (0..1) with { variant "" };
+  type integer INT3nbp (0..7) with { variant "" };
+  type integer INT5nbp (0..31) with { variant "" };
+  type integer INT9nbp (0..511) with { variant "" };
+  type integer INT13nbp (0..8191) with { variant "" };
+  type integer INT15nbp (0..32767) with { variant "" };
+
+  //****************************************************
+  // Structures
+  //****************************************************
+
+  //integer record
+  type record of integer Integers with { variant "" };
+  type Integers IntegerList;
+  type record of Integers Integer_array with { variant "" };
+  type set of integer IntegerSet with { variant "" };
+  
+  //****************************************************
+  // Floats
+  //****************************************************
+  
+  type record of float Floats with { variant "" };
+  type Floats FloatList;
+  type set of float FloatSet with { variant "" };
+
+  //****************************************************
+  // Universal Charstrings
+  //****************************************************
+  
+  type record of universal charstring UniversalCharstrings with { variant "" };
+  type UniversalCharstrings UniversalCharstringList;
+  type set of universal charstring UniversalCharstringSet with { variant "" };
+  
+  //****************************************************
+  // Booleans
+  //****************************************************
+  
+  type record of boolean Booleans with { variant "" };
+  type Booleans BooleanList;
+  type set of boolean BooleanSet with { variant "" };
+  
+  //****************************************************
+  // Verdicttypes
+  //****************************************************
+  
+  type record of verdicttype Verdicttypes with { variant "" };
+  type Verdicttypes VerdicttypeList;
+  type set of verdicttype VerdicttypeSet with { variant "" };
+  
+  //****************************************************
+  // Anytypes
+  //****************************************************
+  
+  type record of anytype Anytypes with { variant "" };
+  type Anytypes AnytypeList;
+  type set of anytype AnytypeSet with { variant "" };
+  
+} // end group NativeTypes
+
+//****************************************************
+//****************************************************
+// RAW Encoded Types
+//****************************************************
+//****************************************************
+
+group SimpleRAWEncodedTypes {
+
+  //****************************************************
+  // Bitstrings
+  //****************************************************
+
+  //bitstring with fixed length
+  type bitstring BIT6_BO_LAST length (6) with {variant "BYTEORDER(last)"};
+  type bitstring BIT16_BO_LAST length (16) with {variant "BYTEORDER(last)"};
+  type bitstring BIT32_BO_LAST length (32) with {variant "BYTEORDER(last)"};
+
+  //****************************************************
+  // Octetstrings
+  //****************************************************
+  //octetstring with fixed length
+  type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" };
+  type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" };
+  type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" };
+  type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" };
+  type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" };
+  type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" };
+  type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" };
+  type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" };
+  type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" };
+  type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" };
+  type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" };
+  type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" };
+  type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" };
+  type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" };
+  type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" };
+  type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" };
+  type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" };
+  type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" };
+  type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" };
+  type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" };
+  type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" };
+  type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" };
+  type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" };
+  type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" };
+  type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" };
+
+  //octetstring with length interval
+  type octetstring OCT1_260 length(1..260) with { variant "" };
+  type octetstring OCT1_8   length(1..8) with { variant "" };
+  type octetstring OCT1_12  length(1..12) with { variant "" };
+  type octetstring OCT1_32  length(1..32) with { variant "" };
+  type octetstring OCT1_50  length(1..50) with { variant "" };
+  type octetstring OCT3_8   length(3..8) with { variant "" };
+
+  type octetstring OCTN with { variant "" };
+
+  //****************************************************
+  // Hexstrings
+  //****************************************************
+
+  //hexstring with fixed length
+  type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"};
+
+  //hexstring with length interval
+  type hexstring HEX0_16 length(0..16) with { variant "" };
+  type hexstring HEX5_16 length(5..16) with { variant "" };
+  type hexstring HEX1_32 length(1..32) with { variant "" };
+
+
+  //****************************************************
+  // Integers
+  //****************************************************
+
+  //integer with fixed octet number
+  type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" };
+  type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" };
+  type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" };
+  type integer LIN2_BO_LAST (0..65535) with { variant "FIELDLENGTH(16), COMP(nosign), BYTEORDER(last)" };
+  type integer LIN3_BO_LAST (0..16777215) with { variant "FIELDLENGTH(24), COMP(nosign), BYTEORDER(last)" };
+  type integer LIN4_BO_LAST (0..4294967295) with { variant "FIELDLENGTH(32), COMP(nosign), BYTEORDER(last)" };
+
+  //integer with fixed bit number
+  type integer INT1b (0..1) with { variant "FIELDLENGTH(1)" };
+  type integer INT2b (0..3) with { variant "FIELDLENGTH(2)" };
+  type integer INT3b (0..7) with { variant "FIELDLENGTH(3)" };
+  type integer INT4b (0..15) with { variant "FIELDLENGTH(4)" };
+  type integer INT5b (0..31) with { variant "FIELDLENGTH(5)" };
+  type integer INT6b (0..63) with { variant "FIELDLENGTH(6)" };
+  type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" };
+  type integer INT11b_BO_LAST ( 0 .. 2047 ) with { variant "FIELDLENGTH(11), COMP(nosign), BYTEORDER(last)" };
+  type integer INT12b_BO_LAST ( 0 .. 4095 ) with { variant "FIELDLENGTH(12), COMP(nosign), BYTEORDER(last)" };
+  type integer INT13b_BO_LAST ( 0 .. 8191 ) with { variant "FIELDLENGTH(13), COMP(nosign), BYTEORDER(last)" };
+  type integer INT14b_BO_LAST ( 0 .. 16383 ) with { variant "FIELDLENGTH(14), COMP(nosign), BYTEORDER(last)" };
+  type integer INT18b_BO_LAST ( 0 .. 262143 ) with { variant "FIELDLENGTH(18), COMP(nosign), BYTEORDER(last)" };
+  type integer INT20b_BO_LAST ( 0 .. 1048575 ) with { variant "FIELDLENGTH(20), COMP(nosign), BYTEORDER(last)" };
+  type integer INT31b_BO_LAST ( 0 .. 2147483647 ) with { variant "FIELDLENGTH(31), COMP(nosign), BYTEORDER(last)" };
+
+} // end group SimpleRAWEncodedTypes
+
+group ComponentTypes {
+  type component Dummy_comptype {}
+  type component Dummy_CT {}
+} // end group ComponentTypes
+
+group CompositeTypes {
+  type enumerated Protocols
+    { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap }
+
+  type record of OCT1           OCT1List with { variant "" };
+  type record of OCT2           OCT2List with { variant "" };
+  type record of OCT3           OCT3List with { variant "" };
+  type record of OCT4           OCT4List with { variant "" };
+  type record of OCT5           OCT5List with { variant "" };
+  type record of OCT6           OCT6List with { variant "" };
+  type record of OCT7           OCT7List with { variant "" };
+
+  type record of Dummy_comptype ListOfDummy_comptype with { variant "" };
+  type record of Dummy_CT       ListOfDummy_CT with { variant "" };
+  type record of Protocols      ProtocolList with { variant "" };
+} // end group CompositeTypes
+
+} with { encode "RAW" } /* End of module General_Types */
+
diff --git a/COMMON/src/MobileDomainDefinitions.asn b/COMMON/src/MobileDomainDefinitions.asn
new file mode 100644
index 0000000..0685484
--- /dev/null
+++ b/COMMON/src/MobileDomainDefinitions.asn
@@ -0,0 +1,54 @@
+-- *******************************************************************************

+-- * Copyright (c) 2004, 2014  Ericsson AB

+-- * All rights reserved. This program and the accompanying materials

+-- * are made available under the terms of the Eclipse Public License v1.0

+-- * which accompanies this distribution, and is available at

+-- * http://www.eclipse.org/legal/epl-v10.html

+-- *

+-- * Contributors:

+-- *   Zoltan Jasz - initial implementation and initial documentation

+-- *   Abhishek Gupta

+-- *   Attila Balasko

+-- *   Endre Kulcsar

+-- *   Gabor Bettesch

+-- *   Gabor Szalai

+-- *   Janos Kovesdi

+-- *   Sandor Palugyai

+-- *   Tibor Csondes

+-- *******************************************************************************

+-- 

+--   File:               MobileDomainDefinitions.asn

+--   Rev:                R9A
+--   Prodnr:             CNL 113 368

+--   Reference:          

+

+MobileDomainDefinitions {ccitt (0) identified-organization (4) etsi (0)

+			 mobileDomain (0) mobileDomainDefinitions (0) version1 (1)}

+

+DEFINITIONS ::=

+BEGIN

+

+IMPORTS ;

+

+-- Mobile DomainId

+

+mobileDomainId OBJECT IDENTIFIER ::= {ccitt (0) identified-organization (4) etsi (0) mobileDomain (0)}

+

+-- Mobile Subdomains

+

+gsm-NetworkId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Network (1)}

+gsm-AccessId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Access (2)}

+gsm-OperationAndMaintenanceId OBJECT IDENTIFIER ::= 	{mobileDomainId gsm-Operation-Maintenance (3)}

+gsm-MessagingId OBJECT IDENTIFIER ::= 			{mobileDomainId gsm-Messaging (4)}

+

+-- Common Component Ids for structuring Mobile Subdomains

+

+CommonComponentId ::= INTEGER (0..9)

+

+ac-Id CommonComponentId ::= 0

+as-Id CommonComponentId ::= 1

+ase-Id CommonComponentId ::= 2

+moduleId CommonComponentId ::= 3

+er-Id CommonComponentId ::= 4

+

+END -- MobileDomainDefinitions

diff --git a/COMMON/src/ProtocolModules_Common.grp b/COMMON/src/ProtocolModules_Common.grp
new file mode 100644
index 0000000..90214d5
--- /dev/null
+++ b/COMMON/src/ProtocolModules_Common.grp
@@ -0,0 +1,39 @@
+<!--
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               ProtocolModules_Common.grp
+//  Description:        
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:          
+//
+//
+-->
+<!DOCTYPE TITAN_GUI_FileGroup_file>
+<FileGroup TITAN_version="3.1.pl0" >
+    <File_Group name="ProtocolModules_Common" >
+        <File path="General_Types.ttcn" />
+        <File path="MobileDomainDefinitions.asn" />
+        <File path="UsefulTtcn3Types.ttcn" />
+        <File path="XSD.ttcn" />	
+        <File path="general_typedefs.ttcn" />
+        <File path="http_www_w3_org_XML_1998_namespace.ttcn" />		
+    </File_Group>
+</FileGroup>
diff --git a/COMMON/src/UsefulTtcn3Types.ttcn b/COMMON/src/UsefulTtcn3Types.ttcn
new file mode 100644
index 0000000..911e1a5
--- /dev/null
+++ b/COMMON/src/UsefulTtcn3Types.ttcn
@@ -0,0 +1,99 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:          UsefulTtcn3Types.ttcn
+//  Rev:           R9A
+//  Prodnr:        CNL 113 368
+//
+////////////////////////////////////////////////////////////////////////////////
+module UsefulTtcn3Types {
+
+
+    type integer byte (-128 .. 127) with { variant "/* 8 bit */" };
+
+    type integer unsignedbyte (0 .. 255) with { variant "/*unsigned 8 bit*/" };
+
+    type integer short (-32768 .. 32767) with { variant "/*16 bit*/" };
+
+    type integer unsignedshort (0 .. 65535) with { variant "/*unsigned 16 bit*/" };
+
+    type integer long (-2147483648 .. 2147483647) with { variant "/*32 bit*/" };
+
+    type integer unsignedlong (0 .. 4294967295) with { variant "/*unsigned 32 bit*/" };
+
+    type integer longlong /* (  -9223372036854775808 .. 9223372036854775807 ) */ with { variant "/*64 bit*/" };
+
+    type integer unsignedlonglong /* ( 0 .. 18446744073709551615 ) */ with { variant "/*unsigned 64 bit*/" };
+
+    type float IEEE754float with { variant "/*IEEE754 float*/" };
+
+    type float IEEE754double with { variant "/*IEEE754 double*/" };
+
+    type float IEEE754extfloat with { variant "/*IEEE754 extended float*/" };
+
+    type float IEEE754extdouble with { variant "/*IEEE754 extended double*/" };
+
+    type universal charstring utf8string with { variant "/*UTF-8*/" };
+
+    type universal charstring bmpstring ( char ( 0,0,0,0 ) .. char ( 0,0,255,255) ) with { variant "/*UCS-2*/" };
+
+    type universal charstring utf16string ( char ( 0,0,0,0 ) .. char ( 0,16,255,255) ) with { variant "/*UTF-16*/" };
+
+    type universal charstring iso8859string ( char ( 0,0,0,0 ) .. char ( 0,0,0,255) ) with { variant "/*8 bit*/" };
+
+    type record IDLfixed
+    {
+    	unsignedshort digits,
+    	short scale,
+    	charstring value_
+    }
+    with {
+    variant "/*IDL:fixed FORMAL/01-12-01 v.2.6*/";
+    };
+
+    /*
+    type charstring char length (1);
+
+    NOTE 1: The name of this useful type is the same as the TTCN-3 keyword used to denote universal
+    charstring values in the quadraple form. In general it is disallowed to use TTCN-3 keywords as
+    identifiers. The "char" useful type is a solitary exception and allowed only for backward compatibility
+    with previous versions of the TTCN-3 standard. (except Titan doesn't)
+
+    NOTE 2: The special string "8 bit" defined in clause 28.2.3 may be used with this type to specify a given encoding
+    for its values. Also, other properties of the base type can be changed by using attribute mechanisms.
+    */
+
+    type universal charstring uchar length (1);
+
+    /*
+    NOTE: Special strings defined in clause 28.2.3 except "8 bit" may be used with this type to specify a given
+    encoding for its values. Also, other properties of the base type can be changed by using attribute
+    mechanisms.
+    */
+
+    type bitstring bit length (1);
+
+    type hexstring hex length (1);
+
+    type octetstring octet length (1);
+
+}
+with {
+encode "XML";
+}
diff --git a/COMMON/src/XSD.ttcn b/COMMON/src/XSD.ttcn
new file mode 100644
index 0000000..64157a0
--- /dev/null
+++ b/COMMON/src/XSD.ttcn
@@ -0,0 +1,339 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:          XSD.ttcn
+//  Rev:           R9A
+//  Prodnr:        CNL 113 368
+//
+////////////////////////////////////////////////////////////////////////////////
+module XSD {
+
+import from UsefulTtcn3Types all;
+
+//These constants are used in the XSD date/time type definitions
+const charstring
+  dash := "-",
+  cln  := ":",
+  year := "(0(0(0[1-9]|[1-9][0-9])|[1-9][0-9][0-9])|[1-9][0-9][0-9][0-9])",
+  yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)",
+  month := "(0[1-9]|1[0-2])",
+  dayOfMonth := "(0[1-9]|[12][0-9]|3[01])",
+  hour := "([01][0-9]|2[0-3])",
+  minute := "([0-5][0-9])",
+  second := "([0-5][0-9])",
+  sFraction := "(.[0-9]#(1,))#(,1)",
+  endOfDayExt := "24:00:00(.0#(1,))#(,1)",
+  nums := "[0-9]#(1,)",
+  ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)",
+  durTime := "(T[0-9]#(1,)"&
+             "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"&
+             "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"&
+             "S|"&
+             ".[0-9]#(1,)S))"
+
+//anySimpleType
+
+type XMLCompatibleString AnySimpleType
+with {
+variant "XSD:anySimpleType";
+};
+
+//anyType;
+
+type record AnyType
+{
+	record of String attr,
+	record of String elem_list
+}
+with {
+variant "XSD:anyType";
+variant (attr) "anyAttributes";
+variant (elem_list) "anyElement";
+};
+// String types
+
+type XMLCompatibleString String
+with {
+variant "XSD:string";
+};
+
+type XMLStringWithNoCRLFHT NormalizedString
+with {
+variant "XSD:normalizedString";
+};
+
+type NormalizedString Token
+with {
+variant "XSD:token";
+};
+
+type XMLStringWithNoWhitespace Name
+with {
+variant "XSD:Name";
+};
+
+type XMLStringWithNoWhitespace NMTOKEN
+with {
+variant "XSD:NMTOKEN";
+};
+
+type Name NCName
+with {
+variant "XSD:NCName";
+};
+
+type NCName ID
+with {
+variant "XSD:ID";
+};
+
+type NCName IDREF
+with {
+variant "XSD:IDREF";
+};
+
+type NCName ENTITY
+with {
+variant "XSD:ENTITY";
+};
+
+type octetstring HexBinary
+with {
+variant "XSD:hexBinary";
+};
+
+type octetstring Base64Binary
+with {
+variant "XSD:base64Binary";
+};
+
+type XMLStringWithNoCRLFHT AnyURI
+with {
+variant "XSD:anyURI";
+};
+
+type charstring Language (pattern "[a-zA-Z]#(1,8)(-\w#(1,8))#(0,)")
+with {
+variant "XSD:language";
+};
+// Integer types
+
+type integer Integer
+with {
+variant "XSD:integer";
+};
+
+type integer PositiveInteger (1 .. infinity)
+with {
+variant "XSD:positiveInteger";
+};
+
+type integer NonPositiveInteger (-infinity .. 0)
+with {
+variant "XSD:nonPositiveInteger";
+};
+
+type integer NegativeInteger (-infinity .. -1)
+with {
+variant "XSD:negativeInteger";
+};
+
+type integer NonNegativeInteger (0 .. infinity)
+with {
+variant "XSD:nonNegativeInteger";
+};
+
+type longlong Long
+with {
+variant "XSD:long";
+};
+
+type unsignedlonglong UnsignedLong
+with {
+variant "XSD:unsignedLong";
+};
+
+type long Int
+with {
+variant "XSD:int";
+};
+
+type unsignedlong UnsignedInt
+with {
+variant "XSD:unsignedInt";
+};
+
+type short Short
+with {
+variant "XSD:short";
+};
+
+type unsignedshort UnsignedShort
+with {
+variant "XSD:unsignedShort";
+};
+
+type byte Byte
+with {
+variant "XSD:byte";
+};
+
+type unsignedbyte UnsignedByte
+with {
+variant "XSD:unsignedByte";
+};
+
+// Float types
+
+type float Decimal
+with {
+variant "XSD:decimal";
+};
+
+type IEEE754float Float
+with {
+variant "XSD:float";
+};
+
+type IEEE754double Double
+with {
+variant "XSD:double";
+};
+
+// Time types
+
+type charstring Duration (pattern
+  "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" &
+  "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})")
+with {
+variant "XSD:duration";
+};
+
+type charstring DateTime (pattern
+  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" &
+ "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
+with {
+variant "XSD:dateTime";
+};
+
+type charstring Time (pattern
+  "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
+with {
+variant "XSD:time";
+};
+
+type charstring Date (pattern
+  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:date";
+};
+
+type charstring GYearMonth (pattern
+  "{yearExpansion}{year}{dash}{month}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gYearMonth";
+};
+
+type charstring GYear (pattern
+  "{yearExpansion}{year}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gYear";
+};
+
+type charstring GMonthDay (pattern
+ "{dash}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gMonthDay";
+};
+
+type charstring GDay (pattern
+  "{dash}{dash}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gDay";
+};
+
+type charstring GMonth (pattern
+  "{dash}{dash}{month}{ZorTimeZoneExt}" )
+with {
+variant "XSD:gMonth";
+};
+
+// Sequence types
+
+type record of NMTOKEN NMTOKENS
+with {
+variant "XSD:NMTOKENS";
+};
+
+type record of IDREF IDREFS
+with {
+variant "XSD:IDREFS";
+};
+
+type record of ENTITY ENTITIES
+with {
+variant "XSD:ENTITIES";
+};
+
+type record QName
+{
+	AnyURI uri  optional,
+	NCName name
+}
+with {
+variant "XSD:QName";
+};
+
+// Boolean type
+
+type boolean Boolean
+with {
+variant "XSD:boolean";
+};
+
+//TTCN-3 type definitions supporting the mapping of W3C XML Schema built-in datatypes
+
+type utf8string XMLCompatibleString
+(
+	char(0,0,0,9)..char(0,0,0,9),
+	char(0,0,0,10)..char(0,0,0,10),
+	char(0,0,0,12)..char(0,0,0,12),
+  	char(0,0,0,32)..char(0,0,215,255),
+  	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+type utf8string XMLStringWithNoWhitespace
+(
+	char(0,0,0,33)..char(0,0,215,255),
+  	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+type utf8string XMLStringWithNoCRLFHT
+(
+	char(0,0,0,32)..char(0,0,215,255),
+ 	char(0,0,224,0)..char(0,0,255,253),
+  	char(0,1,0,0)..char(0,16,255,253)
+)
+
+}
+with{
+encode "XML"
+}
diff --git a/COMMON/src/general_typedefs.ttcn b/COMMON/src/general_typedefs.ttcn
new file mode 100644
index 0000000..6432e53
--- /dev/null
+++ b/COMMON/src/general_typedefs.ttcn
@@ -0,0 +1,236 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               general_typedefs.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:          
+
+module general_typedefs
+{
+
+group SimpleNativeTypes
+{
+//octetstring with fixed length
+type octetstring OCT0n length(0);
+type octetstring OCT1n length(1);
+type octetstring OCT2n length(2);
+type octetstring OCT3n length(3);
+type octetstring OCT4n length(4);
+type octetstring OCT5n length(5);
+type octetstring OCT6n length(6);
+type octetstring OCT7n length(7);
+type octetstring OCT8n length(8);
+type octetstring OCT9n length(9);
+type octetstring OCT10n length(10);
+type octetstring OCT11n length(11);
+type octetstring OCT12n length(12);
+type octetstring OCT13n length(13);
+type octetstring OCT14n length(14);
+type octetstring OCT15n length(15);
+type octetstring OCT16n length(16);
+type octetstring OCT17n length(17);
+type octetstring OCT18n length(18);
+type octetstring OCT19n length(19);
+type octetstring OCT20n length(20);
+type octetstring OCT28n length(28);
+type octetstring OCT32n length(32);
+type octetstring OCT34n length(34);
+type octetstring OCT46n length(46);
+type octetstring OCT50n length(50);
+type octetstring OCT69n length(69);
+type octetstring OCT100n length(100);
+type octetstring OCT128n length(128);
+type octetstring OCT500n length(500);
+type octetstring OCTNn;
+
+//octetstring with length interval
+type octetstring OCT1_3n length(1..3);
+type octetstring OCT1_4n length(1..4);
+type octetstring OCT1_5n length(1..5);
+type octetstring OCT1_6n length(1..6);
+type octetstring OCT1_7n length(1..7);
+type octetstring OCT1_8n length(1..8);
+type octetstring OCT1_12n length(1..12);
+type octetstring OCT1_15n length(1..15);
+type octetstring OCT1_16n length(1..16);
+type octetstring OCT1_18n length(1..18);
+type octetstring OCT1_20n length(1..20);
+type octetstring OCT1_24n length(1..24);
+type octetstring OCT1_34n length(1..34);
+type octetstring OCT1_46n length(1..46);
+type octetstring OCT1_50n length(1..50);
+type octetstring OCT1_112n length(1..112);
+type octetstring OCT1_127n length(1..127);
+type octetstring OCT1_128n length(1..128);
+type octetstring OCT1_172n length(1..172);
+type octetstring OCT3_5n length(3..5);
+type octetstring OCT3_7n length(3..7);
+type octetstring OCT3_8n length(3..8);
+type octetstring OCT3_17n length(3..17);
+type octetstring OCT4_8n length(4..8);
+
+//hexstring with fixed length
+type hexstring HEX24n length(24);
+
+//hexstring with length interval
+type hexstring HEX0_18n length(0..18);
+type hexstring HEX1_20n length(1..20);
+
+
+//bitstring with fixed length
+type bitstring BIT1n length(1);
+type bitstring BIT2n length(2);
+type bitstring BIT3n length(3);
+type bitstring BIT4n length(4);
+type bitstring BIT5n length(5);
+type bitstring BIT6n length(6);
+type bitstring BIT7n length(7);
+type bitstring BIT8n length(8);
+type bitstring BIT9n length(9);
+type bitstring BIT12n length(12);
+type bitstring BIT14n length(14);
+type bitstring BIT15n length(15);
+type bitstring BIT16n length(16);
+type bitstring BIT56n length(56);
+
+//bitstring with length interval
+type bitstring BIT14_24n length(14..24);
+
+//bitstring to be padded with fixed length 
+type bitstring BIT1np length(1);
+type bitstring BIT2np length(2);
+type bitstring BIT3np length(3);
+type bitstring BIT4np length(4);
+type bitstring BIT5np length(5);
+type bitstring BIT6np length(6);
+type bitstring BIT7np length(7);
+type bitstring BIT15np length(15);
+
+//integer with fixed bit number
+type integer INT3nb (0..7);
+type integer INT4nb (0..15);
+type integer INT5nb (0..31);
+type integer INT8nb (0..255);
+
+//integer with fixed bit number and with padding
+type integer INT2nbp (0..3);
+type integer INT1nbp (0..1);
+type integer INT3nbp (0..7);
+type integer INT5nbp (0..31);
+type integer INT9nbp (0..511);
+type integer INT13nbp (0..8095);
+type integer INT15nbp (0..32767);
+
+}// end group NativeTypes
+
+group SimpleRAWEncodedTypes
+{
+//octetstring with fixed length
+type octetstring Dummy length(0) with { variant "FIELDLENGTH(0)" };
+type octetstring OCT0 length(0) with { variant "FIELDLENGTH(0)" };
+type octetstring OCT1 length(1) with { variant "FIELDLENGTH(1)" };
+type octetstring OCT2 length(2) with { variant "FIELDLENGTH(2)" };
+type octetstring OCT3 length(3) with { variant "FIELDLENGTH(3)" };
+type octetstring OCT4 length(4) with { variant "FIELDLENGTH(4)" };
+type octetstring OCT5 length(5) with { variant "FIELDLENGTH(5)" };
+type octetstring OCT6 length(6) with { variant "FIELDLENGTH(6)" };
+type octetstring OCT7 length(7) with { variant "FIELDLENGTH(7)" };
+type octetstring OCT8 length(8) with { variant "FIELDLENGTH(8)" };
+type octetstring OCT9 length(9) with { variant "FIELDLENGTH(9)" };
+type octetstring OCT10 length(10) with { variant "FIELDLENGTH(10)" };
+type octetstring OCT11 length(11) with { variant "FIELDLENGTH(11)" };
+type octetstring OCT12 length(12) with { variant "FIELDLENGTH(12)" };
+type octetstring OCT13 length(13) with { variant "FIELDLENGTH(13)" };
+type octetstring OCT14 length(14) with { variant "FIELDLENGTH(14)" };
+type octetstring OCT15 length(15) with { variant "FIELDLENGTH(15)" };
+type octetstring OCT16 length(16) with { variant "FIELDLENGTH(16)" };
+type octetstring OCT17 length(17) with { variant "FIELDLENGTH(17)" };
+type octetstring OCT18 length(18) with { variant "FIELDLENGTH(18)" };
+type octetstring OCT19 length(19) with { variant "FIELDLENGTH(19)" };
+type octetstring OCT20 length(20) with { variant "FIELDLENGTH(20)" };
+type octetstring OCT32 length(32) with { variant "FIELDLENGTH(32)" };
+type octetstring OCT34 length(34) with { variant "FIELDLENGTH(34)" };
+type octetstring OCT46 length(46) with { variant "FIELDLENGTH(46)" };
+
+//octetstring with length interval
+type octetstring OCT1_12 length(1..12) with { variant "" };
+type octetstring OCT1_8 length(1..8) with { variant "" };
+type octetstring OCT3_8 length(3..8) with { variant "" };
+type octetstring OCT1_50 length(1..50) with { variant "" };
+type octetstring OCTN with { variant "" };
+
+//bitstring with fixed length
+type bitstring BIT1 length(1) with { variant "FIELDLENGTH (1)" };
+type bitstring BIT2 length(2) with { variant "FIELDLENGTH(2)" };
+type bitstring BIT3 length(3) with { variant "FIELDLENGTH(3)" };
+type bitstring BIT4 length(4) with { variant "FIELDLENGTH(4)" };
+type bitstring BIT5 length(5) with { variant "FIELDLENGTH(5)" };
+type bitstring BIT6 length(6) with { variant "FIELDLENGTH(6)" };
+type bitstring BIT7 length(7) with { variant "FIELDLENGTH(7)" };
+type bitstring BIT8 length(8) with { variant "FIELDLENGTH(8)" };
+type bitstring BIT9 length(9) with { variant "FIELDLENGTH(9)" };
+type bitstring BIT12 length(12) with { variant "FIELDLENGTH(12)" };
+type bitstring BIT14 length(14) with { variant "FIELDLENGTH(14)" };
+type bitstring BIT15 length(15) with { variant "FIELDLENGTH(15)" };
+type bitstring BIT16 length(16) with { variant "FIELDLENGTH(16)" };
+type bitstring BIT24 length(24) with { variant "FIELDLENGTH(24)" };
+type bitstring BIT31 length(31) with { variant "FIELDLENGTH(31)" };
+type bitstring BIT56 length(56) with { variant "FIELDLENGTH(56)" };
+
+type hexstring HEX1 length(1) with {variant "FIELDLENGTH(1)"};
+    
+//integer with fixed octet number
+type integer INT1 (0..255) with { variant "FIELDLENGTH(8)" };
+type integer LIN1 (0..255) with { variant "FIELDLENGTH(8)" }
+type integer LIN2 (0..65535) with { variant "FIELDLENGTH(16)" }
+
+//integer with fixed bit number
+type integer INT7b (0..127) with { variant "FIELDLENGTH(7)" };
+
+//integer record
+type record of integer Integers;
+type record of Integers Integer_array;
+
+} with {encode "RAW"} // end group SimpleRAWEncodedTypes
+
+  group ComponentTypes
+  {
+   type component Dummy_comptype {}
+  }
+
+  group CompositeTypes
+  {
+   type enumerated Protocols
+    { mtp3, sccp, isup, bicc, qaal2, gcp, bssap, bssmap, ranap, dtap }
+
+   type record of OCT1           OCT1List;
+   type record of OCT2           OCT2List;
+   type record of OCT3           OCT3List;
+   type record of OCT4           OCT4List;
+   type record of OCT5           OCT5List;
+   type record of OCT6           OCT6List;
+   type record of OCT7           OCT7List;
+
+   type record of Dummy_comptype ListOfDummy_comptype;
+   
+   type record of Protocols      ProtocolList;
+  }
+
+}with { encode "RAW"} /* End of module general_typedefs */ 
diff --git a/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn
new file mode 100644
index 0000000..99f570a
--- /dev/null
+++ b/COMMON/src/http_www_w3_org_XML_1998_namespace.ttcn
@@ -0,0 +1,150 @@
+/******************************************************************************
+* Copyright (c) 2004, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*   Zoltan Jasz - initial implementation and initial documentation
+*   Abhishek Gupta
+*   Attila Balasko
+*   Endre Kulcsar
+*   Gabor Bettesch
+*   Gabor Szalai
+*   Janos Kovesdi
+*   Sandor Palugyai
+*   Tibor Csondes
+******************************************************************************/
+//
+//  File:               http_www_w3_org_XML_1998_namespace.ttcn
+//  Rev:                R9A
+//  Prodnr:             CNL 113 368
+//  Reference:
+
+module http_www_w3_org_XML_1998_namespace {
+
+
+import from XSD all;
+
+
+/* See http://www.w3.org/XML/1998/namespace.html and
+   http://www.w3.org/TR/REC-xml for information about this namespace.
+
+    This schema document describes the XML namespace, in a form
+    suitable for import by other schema documents.  
+
+    Note that local names in this namespace are intended to be defined
+    only by the World Wide Web Consortium or its subgroups.  The
+    following names are currently defined in this namespace and should
+    not be used with conflicting semantics by any Working Group,
+    specification, or document instance:
+
+    base (as an attribute name): denotes an attribute whose value
+         provides a URI to be used as the base for interpreting any
+         relative URIs in the scope of the element on which it
+         appears; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML Base specification.
+
+    lang (as an attribute name): denotes an attribute whose value
+         is a language code for the natural language of the content of
+         any element; its value is inherited.  This name is reserved
+         by virtue of its definition in the XML specification.
+
+    space (as an attribute name): denotes an attribute whose
+         value is a keyword indicating what whitespace processing
+         discipline is intended for the content of the element; its
+         value is inherited.  This name is reserved by virtue of its
+         definition in the XML specification.
+
+    Father (in any context at all): denotes Jon Bosak, the chair of 
+         the original XML Working Group.  This name is reserved by 
+         the following decision of the W3C XML Plenary and 
+         XML Coordination groups:
+
+             In appreciation for his vision, leadership and dedication
+             the W3C XML Plenary on this 10th day of February, 2000
+             reserves for Jon Bosak in perpetuity the XML name
+             xml:Father */
+
+
+/* This schema defines attributes and an attribute group
+        suitable for use by
+        schemas wishing to allow xml:base, xml:lang or xml:space attributes
+        on elements they define.
+
+        To enable this, such a schema must import this schema
+        for the XML namespace, e.g. as follows: */
+/* < */
+/* schema . . . */
+/* > */
+/* . . . */
+/* < */
+/* import namespace="http://www.w3.org/XML/1998/namespace"
+                    schemaLocation="http://www.w3.org/2001/03/xml.xsd"/ */
+/* > */
+/* Subsequently, qualified reference to any of the attributes
+        or the group defined below will have the desired effect, e.g. */
+/* < */
+/* type . . . */
+/* > */
+/* . . . */
+/* < */
+/* attributeGroup ref="xml:specialAttrs"/ */
+/* > */
+/* will define a type which will schema-validate an instance
+         element with any of those attributes */
+
+
+/* In keeping with the XML Schema WG's standard versioning
+   policy, this schema document will persist at
+   http://www.w3.org/2001/03/xml.xsd.
+   At the date of issue it can also be found at
+   http://www.w3.org/2001/xml.xsd.
+   The schema document at that URI may however change in the future,
+   in order to remain compatible with the latest version of XML Schema
+   itself.  In other words, if the XML Schema namespace changes, the version
+   of this document at
+   http://www.w3.org/2001/xml.xsd will change
+   accordingly; the version at
+   http://www.w3.org/2001/03/xml.xsd will not change. */
+
+
+/* In due course, we should install the relevant ISO 2- and 3-letter
+         codes as the enumerated possible values . . . */
+type XSD.Language Lang
+with {
+variant "name as uncapitalized";
+variant "attribute";
+};
+
+
+type enumerated Space
+{
+	default_,
+	preserve
+}
+with {
+variant "text 'default_' as 'default'";
+variant "name as uncapitalized";
+variant "defaultForEmpty as 'preserve'";
+variant "attribute";
+};
+
+
+/* See http://www.w3.org/TR/xmlbase/ for
+                     information about this attribute. */
+type XSD.AnyURI Base
+with {
+variant "name as uncapitalized";
+variant "attribute";
+};
+
+
+}
+with {
+encode "XML";
+variant "namespace as 'http://www.w3.org/XML/1998/namespace'";
+variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'";
+extension "version R9A"
+}
diff --git a/M3UA_CNL113536/M3UA_CNL113536.tpd b/M3UA_CNL113536/M3UA_CNL113536.tpd
new file mode 100644
index 0000000..c672902
--- /dev/null
+++ b/M3UA_CNL113536/M3UA_CNL113536.tpd
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               M3UA_CNL113536.tpd
+   Description:        tpd project file
+   Rev:                R2A
+   Prodnr:             CNL 113 536
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>M3UA_CNL113536</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/M3UA_Types.ttcn" relativeURI="src/M3UA_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/M3UA_CNL113536</targetExecutable>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/M3UA_CNL113536/doc/documentation_note.txt b/M3UA_CNL113536/doc/documentation_note.txt
new file mode 100644
index 0000000..eb68bfb
--- /dev/null
+++ b/M3UA_CNL113536/doc/documentation_note.txt
@@ -0,0 +1,13 @@
+Please note that the storage of the documentation of the product has been 
+moved to the eridoc.ericsson.se from the ClearCase.
+
+You can access the documentation of the product via the following links:
+
+The documentation belongs to the R2A revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=C&Lang=EN&PRev=Y
+
+The documentation belongs to the latest revision of the product
+can be found here:
+http://document.internal.ericsson.com/Download?DocNo=1095-CNL113536&Rev=HIGHEST&Lang=EN&Status=FREE&PRev=Y
+
diff --git a/M3UA_CNL113536/src/M3UA_Types.ttcn b/M3UA_CNL113536/src/M3UA_Types.ttcn
new file mode 100644
index 0000000..d79d832
--- /dev/null
+++ b/M3UA_CNL113536/src/M3UA_Types.ttcn
@@ -0,0 +1,805 @@
+/******************************************************************************
+* Copyright (c) 2004, 2015  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+* Ferenc Kovacs
+* Gabor Bettesch
+* Gabor Szalai
+******************************************************************************/
+//
+//  File:               M3UA_Types.ttcn
+//  Rev:                R2A
+//  Prodnr:             CNL 113 536
+//  Reference:
+
+module M3UA_Types {
+
+import from General_Types all; 
+
+external function enc_PDU_M3UA(in PDU_M3UA pdu) return octetstring
+with { extension "prototype(convert)"
+       extension "encode(RAW)"
+     }
+
+external function dec_PDU_M3UA(in octetstring stream) return PDU_M3UA
+with { extension "prototype(convert)"
+       extension "decode(RAW)"
+     }
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++      
+// M3UA PARAMETERS
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type octetstring M3UA_OCT0_255 length (0..255);
+
+type record M3UA_Point_Code
+{
+  OCT1 mask,
+  OCT3 affected_Point_Code
+}
+
+type record of M3UA_Point_Code M3UA_Point_Codes;
+
+type record M3UA_Error_Code
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT4      errorCode
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,errorCode)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Routing_Context
+{
+  OCT2            tag,
+  integer         lengthInd,
+  octetstring     routingContext
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,routingContext)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Affected_Point_Codes
+{
+  OCT2             tag,
+  integer          lengthInd,
+  M3UA_Point_Codes pointCodes
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,pointCodes)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Network_Appearance
+{
+  OCT2         tag,
+  integer      lengthInd,
+  OCT4         networkAppearance
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,networkAppearance)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_Diagnostic_information
+{
+  OCT2         tag,
+  integer      lengthInd,
+  octetstring  diagnosticInformation
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,diagnosticInformation)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Correlation_ID
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT4      correlationID
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,correlationID)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+      
+type record M3UA_Protocol_Data
+{
+  OCT2        tag,
+  integer     lengthInd,
+  OCT4        oPC,
+  OCT4        dPC,
+  OCT1        sI,
+  OCT1        nI,
+  OCT1        mP,
+  OCT1        sLS,
+  octetstring userProtocolData
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,oPC,dPC,sI,nI,mP,sLS,
+                                       userProtocolData)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Info_String
+{
+  OCT2          tag,
+  integer       lengthInd,
+  M3UA_OCT0_255 infoString 
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,infoString)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record  M3UA_Concerned_Destination 
+{
+  OCT2      tag,
+  integer   lengthInd,
+  OCT1      reserved,
+  OCT3      concernedDestination
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,
+                                       concernedDestination)"; 
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record  M3UA_Congestion_Indicators
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT1       reserved,
+  OCT3       congestionLevel
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,reserved,congestionLevel)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+type record M3UA_User_Cause
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT2       cause,
+  OCT2       user
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,cause,user)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+        }    
+
+type record M3UA_ASP_Identifier
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT4       aSPIdentifier
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,aSPIdentifier)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }    
+
+type record M3UA_Heartbeat_Data
+{
+  OCT2        tag,
+  integer     lengthInd,
+  octetstring heartbeat_Data
+} with { variant (lengthInd) "LENGTHTO(tag,lengthInd,heartbeat_Data)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+         variant "PADDING(dword32)";
+       }
+
+type record M3UA_Traffic_Mode_Type
+{
+  OCT2       tag,
+  integer    lengthInd,
+  OCT4       trafficModeType
+} with { variant (lengthInd) "LENGTHTO (tag,lengthInd,trafficModeType)";
+         variant (lengthInd) "FIELDLENGTH(16)";
+         variant (lengthInd) "BYTEORDER(last)";
+       }
+
+
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+//PDUs
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+
+// M3UA_ERR PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ERR
+{
+  OCT1                       version,
+  OCT1                       reserved,
+  OCT2                       messageClassAndType,
+  integer                    messageLength,
+  M3UA_ERR_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ERR_MessageParameters
+{
+  M3UA_Error_Code             error_Code,
+  M3UA_Routing_Context        routing_Context optional,
+  M3UA_Affected_Point_Codes   affected_Point_Codes optional,
+  M3UA_Network_Appearance     network_Appearance optional,
+  M3UA_Diagnostic_information diagnostic_information optional
+} with { variant "TAG(error_Code,             tag = '000C'O;
+                      routing_Context,        tag = '0006'O; 
+                      affected_Point_Codes,   tag = '0012'O; 
+                      network_Appearance,     tag = '0200'O; 
+                      diagnostic_information, tag = '0007'O; )"
+       }
+
+
+// M3UA_NOTIFY
+//  NOTE1 : NOTIFY should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_NOTIFY
+{
+  OCT1                       version,
+  OCT1                       reserved,
+  OCT2                       messageClassAndType,
+  integer                    messageLength,
+  octetstring                messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+
+//  M3UA_DATA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DATA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DATA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";   
+       }
+
+type set M3UA_DATA_MessageParameters
+{
+  M3UA_Network_Appearance  network_Appearance optional,
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Protocol_Data       protocol_Data,
+  M3UA_Correlation_ID      correlation_ID optional
+} with { variant "TAG(network_Appearance,   tag = '0200'O;
+                      routing_Context,      tag = '0006'O; 
+                      protocol_Data,        tag = '0210'O; 
+                      correlation_ID,       tag = '0013'O; )"        
+       }
+
+
+//  M3UA_DUNA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DUNA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DUNA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";  
+       }
+
+type set M3UA_DUNA_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,    tag = '0200'O;
+                      routing_Context,       tag = '0006'O; 
+                      affected_Point_Codes,  tag = '0012'O;
+                      info_String,           tag = '0004'O )"
+       }
+
+
+//  M3UA_DAVA PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DAVA
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DAVA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)";  
+       }
+
+type set M3UA_DAVA_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_DAUD PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DAUD
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DAUD_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_DAUD_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_SCON PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_SCON
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_SCON_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_SCON_MessageParameters
+{
+  M3UA_Network_Appearance    network_Appearance optional,
+  M3UA_Routing_Context       routing_Context optional,
+  M3UA_Affected_Point_Codes  affected_Point_Codes,
+  M3UA_Concerned_Destination concerned_Destination optional,
+  M3UA_Congestion_Indicators congestion_Indicators optional,
+  M3UA_Info_String           info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      concerned_Destination,    tag = '0206'O;
+                      congestion_Indicators,    tag = '0205'O;
+                      info_String,              tag = '0004'O )"
+       }
+
+
+//  M3UA_DUPU PDU
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DUPU
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_DUPU_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_DUPU_MessageParameters
+{
+  M3UA_Network_Appearance   network_Appearance optional,
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Affected_Point_Codes affected_Point_Codes,
+  M3UA_User_Cause           user_Cause,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(network_Appearance,       tag = '0200'O;
+                      routing_Context,          tag = '0006'O; 
+                      affected_Point_Codes,     tag = '0012'O;
+                      user_Cause,               tag = '0204'O;
+                      info_String,              tag = '0004'O )"
+       }
+ 
+ 
+//  M3UA_DRST PDU
+//  NOTE1 : DRST should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DRST 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+     
+//  M3UA_ASPUP
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ASPUP
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPUP_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPUP_MessageParameters 
+{
+  M3UA_ASP_Identifier aSP_Identifier optional,
+  M3UA_Info_String    info_String optional
+} with { variant "TAG(aSP_Identifier,      tag = '0011'O;
+                      info_String,         tag = '0004'O; )"
+       }
+  
+  
+//M3UA_ASPUP_Ack  
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPUP_Ack  
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPUP_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPUP_Ack_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O; )"
+       }
+     
+     
+//M3UA_ASPDN
+//++++++++++++++++++++++++++++++++++++++++++++++++++   
+type record M3UA_ASPDN 
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPDN_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPDN_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O; )"
+       }
+
+
+//M3UA_ASPDN_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_ASPDN_Ack 
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPDN_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPDN_Ack_MessageParameters
+{
+  M3UA_Info_String   info_String optional
+} with { variant "TAG(info_String,         tag = '0004'O;)"
+       }
+
+ 
+// M3UA_BEAT
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_BEAT 
+{
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  M3UA_BEAT_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_BEAT_MessageParameters
+{
+  M3UA_Heartbeat_Data  heartbeat_Data optional
+} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
+       }
+
+
+// M3UA_BEAT_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_BEAT_Ack 
+{
+  OCT1                            version,
+  OCT1                            reserved,
+  OCT2                            messageClassAndType,
+  integer                         messageLength,
+  M3UA_BEAT_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_BEAT_Ack_MessageParameters
+{
+  M3UA_Heartbeat_Data  heartbeat_Data optional
+} with { variant "TAG(heartbeat_Data,         tag = '0009'O; )"
+       }
+
+
+// M3UA_ASPAC
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_ASPAC
+{
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPAC_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPAC_MessageParameters
+{
+  M3UA_Traffic_Mode_Type    traffic_Mode_Type optional, 
+  M3UA_Routing_Context      routing_Context optional,
+  M3UA_Info_String          info_String optional
+} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O; 
+                      routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+
+
+// M3UA_ASPAC_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++ 
+type record M3UA_ASPAC_Ack
+{
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPAC_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPAC_Ack_MessageParameters
+{
+  M3UA_Traffic_Mode_Type   traffic_Mode_Type optional, 
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Info_String         info_String optional
+} with { variant "TAG(traffic_Mode_Type,   tag = '000B'O;
+                      routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+ 
+
+// M3UA_ASPIA
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPIA
+{ 
+  OCT1                         version,
+  OCT1                         reserved,
+  OCT2                         messageClassAndType,
+  integer                      messageLength,
+  M3UA_ASPIA_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+type set M3UA_ASPIA_MessageParameters 
+{
+  M3UA_Routing_Context    routing_Context optional,
+  M3UA_Info_String        info_String optional
+} with { variant "TAG(routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+
+ 
+// M3UA_ASPIA_Ack
+//++++++++++++++++++++++++++++++++++++++++++++++++++  
+type record M3UA_ASPIA_Ack
+{ 
+  OCT1                             version,
+  OCT1                             reserved,
+  OCT2                             messageClassAndType,
+  integer                          messageLength,
+  M3UA_ASPIA_Ack_MessageParameters messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+
+type set M3UA_ASPIA_Ack_MessageParameters 
+{
+  M3UA_Routing_Context     routing_Context optional,
+  M3UA_Info_String         info_String optional
+} with { variant "TAG(routing_Context,     tag = '0006'O;
+                      info_String,         tag = '0004'O; )"
+       }
+ 
+ 
+//  M3UA_REG_REQ
+//  NOTE1 : REG REQ should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_REG_REQ 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+ 
+//  M3UA_REG_RSP
+//  NOTE1 : REG RSP should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_REG_RSP 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+ 
+//  M3UA_DEREG_REQ
+//  NOTE1 : DEREG REQ should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DEREG_REQ 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+  
+ 
+//  M3UA_DEREG_RSP
+//  NOTE1 : DEREG RSP should not come and will be dropped if it comes
+//  NOTE2 : messageParameters is simpified implementation as octetstring
+//++++++++++++++++++++++++++++++++++++++++++++++++++
+type record M3UA_DEREG_RSP 
+{                
+  OCT1                        version,
+  OCT1                        reserved,
+  OCT2                        messageClassAndType,
+  integer                     messageLength,
+  octetstring                 messageParameters
+} with { variant (messageLength) "LENGTHTO(version,reserved,messageClassAndType,
+                                           messageLength,messageParameters)"; 
+         variant (messageLength) "FIELDLENGTH(32)";
+         variant (messageLength) "BYTEORDER(last)"; 
+       }
+ 
+
+// Top level PDU
+//************************************************************************
+type union PDU_M3UA
+{
+  M3UA_ERR        m3UA_ERR,        // Error
+  M3UA_NOTIFY     m3UA_NOTIFY,     // Notify - should not come
+  M3UA_DATA       m3UA_DATA,       // Payload data
+  M3UA_DUNA       m3UA_DUNA,       // Destination Unavailable
+  M3UA_DAVA       m3UA_DAVA,       // Destination Available
+  M3UA_DAUD       m3UA_DAUD,       // Destination State Audit
+  M3UA_SCON       m3UA_SCON,       // Signaling Congestion
+  M3UA_DUPU       m3UA_DUPU,       // Destination User Part Unavailable
+  M3UA_DRST       m3UA_DRST,       // DRST - should not come
+  M3UA_ASPUP      m3UA_ASPUP,      // ASP up
+  M3UA_ASPDN      m3UA_ASPDN,      // ASP down
+  M3UA_BEAT       m3UA_BEAT,       // Heartbeat
+  M3UA_BEAT_Ack   m3UA_BEAT_Ack,   // Heartbeat Ack
+  M3UA_ASPUP_Ack  m3UA_ASPUP_Ack,  // ASP up ack
+  M3UA_ASPDN_Ack  m3UA_ASPDN_Ack,  // ASP down ack
+  M3UA_ASPAC      m3UA_ASPAC,      // ASP Active
+  M3UA_ASPIA      m3UA_ASPIA,      // ASP Inactive
+  M3UA_ASPAC_Ack  m3UA_ASPAC_Ack,  // ASP Active Ack
+  M3UA_ASPIA_Ack  m3UA_ASPIA_Ack,  // ASP Inactive
+  M3UA_REG_REQ    m3UA_REG_REQ,    // REG REQ - should not come
+  M3UA_REG_RSP    m3UA_REG_RSP,    // REG RSP - should not come
+  M3UA_DEREG_REQ  m3UA_DEREG_REQ,  // DEREG REQ - should not come
+  M3UA_DEREG_RSP  m3UA_DEREG_RSP   // DEREG RSP - should not come
+} with { variant "TAG(
+          m3UA_ERR,        messageClassAndType = '0000'O;    //MGMT Class (0),
+          m3UA_NOTIFY,     messageClassAndType = '0001'O;    //MGMT Class (0),
+          m3UA_DATA,       messageClassAndType = '0101'O;    //Transf msg Class(1),
+          m3UA_DUNA,       messageClassAndType = '0201'O;    //SSNM Class(2),
+          m3UA_DAVA,       messageClassAndType = '0202'O;    //SSNM Class(2),
+          m3UA_DAUD,       messageClassAndType = '0203'O;    //SSNM Class(2),
+          m3UA_SCON,       messageClassAndType = '0204'O;    //SSNM Class(2),
+          m3UA_DUPU,       messageClassAndType = '0205'O;    //SSNM Class(2),
+          m3UA_DRST,       messageClassAndType = '0206'O;    //SSNM Class(2),
+          m3UA_ASPUP,      messageClassAndType = '0301'O;    //ASPSM Class(3),
+          m3UA_ASPDN,      messageClassAndType = '0302'O;    //ASPSM Class(3),
+          m3UA_BEAT,       messageClassAndType = '0303'O;    //ASPSM Class(3),
+          m3UA_ASPUP_Ack,  messageClassAndType = '0304'O;    //ASPSM Class(3),
+          m3UA_ASPDN_Ack,  messageClassAndType = '0305'O;    //ASPSM Class(3),
+          m3UA_BEAT_Ack,   messageClassAndType = '0306'O;    //ASPSM Class(3),
+          m3UA_ASPAC,      messageClassAndType = '0401'O;    //ASPTM Class(4),
+          m3UA_ASPIA,      messageClassAndType = '0402'O;    //ASPTM Class(4),
+          m3UA_ASPAC_Ack,  messageClassAndType = '0403'O;    //ASPTM Class(4),
+          m3UA_ASPIA_Ack,  messageClassAndType = '0404'O;    //ASPTM Class(4),
+          m3UA_REG_REQ,    messageClassAndType = '0901'O;    //RKM Class(9),
+          m3UA_REG_RSP,    messageClassAndType = '0902'O;    //RKM Class(9),
+          m3UA_DEREG_REQ,  messageClassAndType = '0903'O;    //RKM Class(9),
+          m3UA_DEREG_RSP,  messageClassAndType = '0904'O; )" //RKM Class(9),
+       }
+} with { encode "RAW"}
diff --git a/M3UA_CNL113537/demo/Abstract_Socket.cc b/M3UA_CNL113537/demo/Abstract_Socket.cc
new file mode 120000
index 0000000..6d1b3f3
--- /dev/null
+++ b/M3UA_CNL113537/demo/Abstract_Socket.cc
@@ -0,0 +1 @@
+../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.cc
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/Abstract_Socket.hh b/M3UA_CNL113537/demo/Abstract_Socket.hh
new file mode 120000
index 0000000..ecb6c03
--- /dev/null
+++ b/M3UA_CNL113537/demo/Abstract_Socket.hh
@@ -0,0 +1 @@
+../../../TestPorts/Common_Components/Abstract_Socket_CNL113384/src/Abstract_Socket.hh
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/BICC_EncDec.cc b/M3UA_CNL113537/demo/BICC_EncDec.cc
new file mode 120000
index 0000000..f3f7144
--- /dev/null
+++ b/M3UA_CNL113537/demo/BICC_EncDec.cc
@@ -0,0 +1 @@
+../../../ProtocolModules/BICC_Q.1902.1_CNL113359/src/BICC_EncDec.cc
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/BICC_Types.ttcn b/M3UA_CNL113537/demo/BICC_Types.ttcn
new file mode 120000
index 0000000..de200f7
--- /dev/null
+++ b/M3UA_CNL113537/demo/BICC_Types.ttcn
@@ -0,0 +1 @@
+../../../ProtocolModules/BICC_Q.1902.1_CNL113359/src/BICC_Types.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/General_Types.ttcn b/M3UA_CNL113537/demo/General_Types.ttcn
new file mode 120000
index 0000000..354ebf3
--- /dev/null
+++ b/M3UA_CNL113537/demo/General_Types.ttcn
@@ -0,0 +1 @@
+../../../ProtocolModules/COMMON/src/General_Types.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/M3UA_Emulation.ttcn b/M3UA_CNL113537/demo/M3UA_Emulation.ttcn
new file mode 120000
index 0000000..bf12ab9
--- /dev/null
+++ b/M3UA_CNL113537/demo/M3UA_Emulation.ttcn
@@ -0,0 +1 @@
+../src/M3UA_Emulation.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn b/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn
new file mode 100644
index 0000000..4c1e86a
--- /dev/null
+++ b/M3UA_CNL113537/demo/M3UA_Emulation_Test.ttcn
@@ -0,0 +1,152 @@
+module M3UA_Emulation_Test
+{
+
+//import from MTP3asp_PortType all;
+import from MTP3asp_Types all;
+import from BICC_Types all;
+import from M3UA_Emulation all;
+import from SCTPasp_PortType all;
+
+modulepar
+{
+  SCTP_Association_Address tsp_address := { 0, "", 0, "" };
+  // float tsp_serverWait := 5.0;
+  // boolean tsp_serverTest := false;
+}
+
+type port MTP3asp_PT_Int message
+{
+  out  ASP_MTP3_TRANSFERreq;
+  in ASP_MTP3_TRANSFERind;
+} with {extension "internal"}
+
+type component BICC_CT
+{
+  port MTP3asp_PT_Int BICC_MTP3_PORT;
+}
+
+type component MTC_CT
+{
+  var  BICC_CT vlc_BICC_COMPONENT_1;
+  var  M3UA_CT vlc_M3UA_COMPONENT_1;
+  port SCTPasp_PT SCTP_PORT;
+
+//  var  BICC_CT vlc_BICC_COMPONENT_2;
+//  port MTP3asp_PT M3UA_PORT;
+}
+
+function f_testconfig_bicc(SCTP_Association_Address pl_address) runs on MTC_CT
+{
+  vlc_BICC_COMPONENT_1 := BICC_CT.create;
+  vlc_M3UA_COMPONENT_1 := M3UA_CT.create;
+  connect(vlc_BICC_COMPONENT_1:BICC_MTP3_PORT,
+          vlc_M3UA_COMPONENT_1:MTP3_SP_PORT);
+  map(system:SCTP_PORT, vlc_M3UA_COMPONENT_1:SCTP_PORT);
+  vlc_M3UA_COMPONENT_1.start(f_M3UA_Emulation(pl_address));
+}
+
+function f_testconfig_end_demo_bicc() runs on MTC_CT
+{
+  unmap(system:SCTP_PORT, vlc_M3UA_COMPONENT_1:SCTP_PORT);
+  disconnect(vlc_BICC_COMPONENT_1:BICC_MTP3_PORT, vlc_M3UA_COMPONENT_1:MTP3_SP_PORT);
+  vlc_M3UA_COMPONENT_1.stop;
+}
+
+template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_BICC :=
+{ sio := {
+    ni := '10'B,
+    prio := ?,
+    si := '1101'B
+  },
+  opc := ?,
+  dpc := ?,
+  sls := ?,
+  data := ?
+}
+
+function f_init_BICC_bicc() runs on BICC_CT
+{
+  var PDU_BICC vl_PDU_BICC;
+  var ASP_MTP3_TRANSFERind vl_ASP_MTP3_TRANSFERind;
+  var ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq;
+    
+  vl_PDU_BICC := {
+    BICC_GRA := {
+      CIC := '00000000'O,
+      MType := '00010111'B,
+      var_part_ptr := 1,
+      RngSts :=
+      { range := '1F'O,
+        status := ''O
+      }
+    }
+  }
+
+  vl_ASP_MTP3_TRANSFERreq := {
+    sio := {
+      ni := '10'B,
+      prio := '00'B,
+      si := '1101'B
+    },
+    opc := 115,
+    dpc := 300,
+    sls := 0,
+    data := enc_PDU_BICC(vl_PDU_BICC)
+  }
+  
+  timer T_Timer := 5.0;
+  T_Timer.start;
+  alt {
+    [] BICC_MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind_BICC)
+      -> value vl_ASP_MTP3_TRANSFERind {
+      log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind);
+      vl_PDU_BICC := dec_PDU_BICC(vl_ASP_MTP3_TRANSFERind.data);
+      log("received BICC message: ", vl_PDU_BICC);
+      setverdict(pass);
+      BICC_MTP3_PORT.send(vl_ASP_MTP3_TRANSFERreq);
+      T_Timer.stop;
+    }
+    [] BICC_MTP3_PORT.receive(ASP_MTP3_TRANSFERind : ?)
+      -> value vl_ASP_MTP3_TRANSFERind {
+      log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind);
+      repeat;
+    }
+    [] BICC_MTP3_PORT.receive {
+      setverdict(fail);
+    }
+    [] T_Timer.timeout {
+      setverdict(fail);
+    }
+  }
+  
+  T_Timer.start;
+  alt {
+    [] BICC_MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind_BICC)
+      -> value vl_ASP_MTP3_TRANSFERind {
+      log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind);
+      vl_PDU_BICC := dec_PDU_BICC(vl_ASP_MTP3_TRANSFERind.data);
+      log("received BICC message: ", vl_PDU_BICC);
+      repeat;
+    }
+    [] BICC_MTP3_PORT.receive(ASP_MTP3_TRANSFERind : ?)
+      -> value vl_ASP_MTP3_TRANSFERind {
+      log("BICC_MTP3_PORT: received message: ", vl_ASP_MTP3_TRANSFERind);
+      repeat;
+    }
+    [] BICC_MTP3_PORT.receive {
+    }
+    [] T_Timer.timeout {
+    }
+  }
+
+}
+
+testcase tc_M3UA_demo_bicc() runs on MTC_CT
+{
+  f_testconfig_bicc(tsp_address);
+  vlc_BICC_COMPONENT_1.start(f_init_BICC_bicc());
+  vlc_BICC_COMPONENT_1.done;
+  f_testconfig_end_demo_bicc();
+}
+
+}
diff --git a/M3UA_CNL113537/demo/M3UA_Types.ttcn b/M3UA_CNL113537/demo/M3UA_Types.ttcn
new file mode 120000
index 0000000..ca43cb3
--- /dev/null
+++ b/M3UA_CNL113537/demo/M3UA_Types.ttcn
@@ -0,0 +1 @@
+../../../ProtocolModules/M3UA_CNL113536/src/M3UA_Types.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/MTP3asp_EncDec.cc b/M3UA_CNL113537/demo/MTP3asp_EncDec.cc
new file mode 120000
index 0000000..88f1083
--- /dev/null
+++ b/M3UA_CNL113537/demo/MTP3asp_EncDec.cc
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/MTP3asp_Types.ttcn b/M3UA_CNL113537/demo/MTP3asp_Types.ttcn
new file mode 120000
index 0000000..9f03c54
--- /dev/null
+++ b/M3UA_CNL113537/demo/MTP3asp_Types.ttcn
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/Makefile b/M3UA_CNL113537/demo/Makefile
new file mode 100644
index 0000000..ffc0aeb
--- /dev/null
+++ b/M3UA_CNL113537/demo/Makefile
@@ -0,0 +1,920 @@
+# This Makefile was generated by the Makefile Generator
+# of the TTCN-3 Test Executor version 1.7.pre1 build 7
+# for Gabor Bettesch (ethgbh@mwux018) on Tue May 29 11:06:47 2007
+
+# Copyright 2000-2007 Test Competence Center, Ericsson R & D, Hungary
+# For trouble reporting use the tool MTTSMS.
+# For TR writers guide please visit the web page: http://ttcn.ericsson.se
+
+# The following make commands are available:
+# - make, make all     Builds the executable test suite.
+# - make archive       Archives all source files.
+# - make check         Checks the semantics of TTCN-3 and ASN.1 modules.
+# - make clean         Removes all generated files.
+# - make compile       Translates TTCN-3 and ASN.1 modules to C++.
+# - make dep           Creates/updates dependency list.
+# - make objects       Builds the object files without linking the executable.
+# - make tags          Creates/updates tags file using ctags.
+
+# WARNING! This Makefile can be used with GNU make only.
+# Other versions of make may report syntax errors in it.
+
+#
+# Do NOT touch this line...
+#
+.PHONY: all archive check clean dep objects
+
+#
+# Set these variables...
+#
+
+# The path of your TTCN-3 Test Executor installation:
+# Uncomment this line to override the environment variable.
+# TTCN3_DIR =
+
+# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32)
+PLATFORM = LINUX
+
+# Your C++ compiler:
+CXX = g++
+
+# Flags for the C++ preprocessor (and makedepend as well):
+CPPFLAGS = -D$(PLATFORM) -DTARGET_TEST -I$(TTCN3_DIR)/include -I$(SCTP_DIR)/include
+
+# Flags for the C++ compiler:
+CXXFLAGS = -Wall
+
+# Flags for the linker:
+LDFLAGS =
+
+# Flags for the TTCN-3 and ASN.1 compiler:
+COMPILER_FLAGS = -L
+
+# Execution mode: (either ttcn3 or ttcn3-parallel)
+TTCN3_LIB = ttcn3-parallel
+
+# The path of your OpenSSL installation:
+# If you do not have your own one, leave it unchanged.
+OPENSSL_DIR = $(TTCN3_DIR)
+
+# Directory to store the archived source files:
+ARCHIVE_DIR = backup
+
+SCTP_DIR = /usr/local/lksctp-tools-1.0.6
+#
+# You may change these variables. Add your files if necessary...
+#
+
+# TTCN-3 modules of this project:
+TTCN3_MODULES = General_Types.ttcn BICC_Types.ttcn M3UA_Emulation.ttcn M3UA_Emulation_Test.ttcn M3UA_Types.ttcn SCTPasp_PortType.ttcn SCTPasp_Types.ttcn MTP3asp_Types.ttcn 
+#MTP3asp_PortType.ttcn 
+# ASN.1 modules of this project:
+ASN1_MODULES =
+
+# C++ source & header files generated from the TTCN-3 & ASN.1 modules of
+# this project:
+GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(ASN1_MODULES:.asn=.cc)
+GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
+
+# C/C++ Source & header files of Test Ports, external functions and
+# other modules:
+USER_SOURCES = Abstract_Socket.cc BICC_EncDec.cc SCTPasp_PT.cc MTP3asp_EncDec.cc 
+USER_HEADERS = Abstract_Socket.hh SCTPasp_PT.hh
+#MTP3asp_PT.hh MTP3asp_PT.cc 
+# Object files of this project that are needed for the executable test suite:
+OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o)
+
+# Other files of the project (Makefile, configuration files, etc.)
+# that will be added to the archived source files:
+OTHER_FILES = m3ua_emu.cfg Makefile
+
+# The name of the executable test suite:
+TARGET = M3UA_Emulation_Test
+
+#
+# Do not modify these unless you know what you are doing...
+# Platform specific additional libraries:
+#
+SOLARIS_LIBS = -lsocket -lnsl
+SOLARIS8_LIBS = -lsocket -lnsl
+LINUX_LIBS =
+FREEBSD_LIBS =
+WIN32_LIBS =
+
+#
+# Rules for building the executable...
+#
+
+all: $(TARGET) ;
+
+objects: $(OBJECTS) ;
+
+$(TARGET): $(OBJECTS)
+	$(CXX) $(LDFLAGS) -o $@ $^ \
+	-L$(TTCN3_DIR)/lib -L$(SCTP_DIR)/lib -l$(TTCN3_LIB) \
+	-L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS)
+
+.cc.o .c.o:
+	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
+	@if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi
+
+check: $(TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) $^
+
+compile: $(TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $^ - $?
+	touch $@
+
+browserdata.dat: $(TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) $^
+
+tags: $(TTCN3_MODULES) $(ASN1_MODULES) \
+$(USER_HEADERS) $(USER_SOURCES)
+	$(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes $^
+
+clean:
+	-$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \
+	$(GENERATED_SOURCES) compile \
+	browserdata.dat tags *.log
+
+dep: $(GENERATED_SOURCES) $(USER_SOURCES)
+	makedepend $(CPPFLAGS) $^
+
+archive:
+	mkdir -p $(ARCHIVE_DIR)
+	tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \
+	$(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \
+	| gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz
+
+#
+# Add your rules here if necessary...
+#
+
+# DO NOT DELETE
+
+General_Types.o: General_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+General_Types.o: /usr/include/string.h /usr/include/features.h
+General_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+General_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+General_Types.o: /usr/include/stdio.h /usr/include/bits/types.h
+General_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+General_Types.o: /usr/include/_G_config.h /usr/include/wchar.h
+General_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+General_Types.o: /usr/include/bits/stdio_lim.h
+General_Types.o: /usr/include/bits/sys_errlist.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+General_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h
+General_Types.o: /usr/include/time.h /usr/include/endian.h
+General_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+General_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+General_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+General_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+General_Types.o: /usr/include/sys/time.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+General_Types.o: /usr/include/regex.h
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+General_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+BICC_Types.o: BICC_Types.hh General_Types.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+BICC_Types.o: /usr/include/string.h /usr/include/features.h
+BICC_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+BICC_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+BICC_Types.o: /usr/include/stdio.h /usr/include/bits/types.h
+BICC_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+BICC_Types.o: /usr/include/_G_config.h /usr/include/wchar.h
+BICC_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+BICC_Types.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h
+BICC_Types.o: /usr/include/sys/types.h /usr/include/time.h
+BICC_Types.o: /usr/include/endian.h /usr/include/bits/endian.h
+BICC_Types.o: /usr/include/sys/select.h /usr/include/bits/select.h
+BICC_Types.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+BICC_Types.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
+BICC_Types.o: /usr/include/alloca.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+BICC_Types.o: /usr/include/sys/time.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+BICC_Types.o: /usr/include/regex.h
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+BICC_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+M3UA_Emulation.o: M3UA_Emulation.hh M3UA_Types.hh General_Types.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+M3UA_Emulation.o: /usr/include/string.h /usr/include/features.h
+M3UA_Emulation.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+M3UA_Emulation.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+M3UA_Emulation.o: /usr/include/stdio.h /usr/include/bits/types.h
+M3UA_Emulation.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+M3UA_Emulation.o: /usr/include/_G_config.h /usr/include/wchar.h
+M3UA_Emulation.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+M3UA_Emulation.o: /usr/include/bits/stdio_lim.h
+M3UA_Emulation.o: /usr/include/bits/sys_errlist.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+M3UA_Emulation.o: /usr/include/stdlib.h /usr/include/sys/types.h
+M3UA_Emulation.o: /usr/include/time.h /usr/include/endian.h
+M3UA_Emulation.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+M3UA_Emulation.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+M3UA_Emulation.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+M3UA_Emulation.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+M3UA_Emulation.o: /usr/include/sys/time.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+M3UA_Emulation.o: /usr/include/regex.h
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+M3UA_Emulation.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+M3UA_Emulation.o: SCTPasp_PortType.hh SCTPasp_Types.hh SCTPasp_PT.hh
+M3UA_Emulation.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+M3UA_Emulation.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+M3UA_Emulation.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
+M3UA_Emulation.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
+M3UA_Emulation.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h
+M3UA_Emulation.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h
+M3UA_Emulation.o: /usr/include/netinet/in.h /usr/include/stdint.h
+M3UA_Emulation.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
+M3UA_Emulation.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h
+M3UA_Emulation.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
+M3UA_Emulation.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h
+M3UA_Emulation.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
+M3UA_Emulation.o: MTP3asp_Types.hh
+M3UA_Emulation_Test.o: M3UA_Emulation_Test.hh BICC_Types.hh General_Types.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+M3UA_Emulation_Test.o: /usr/include/string.h /usr/include/features.h
+M3UA_Emulation_Test.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+M3UA_Emulation_Test.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+M3UA_Emulation_Test.o: /usr/include/stdio.h /usr/include/bits/types.h
+M3UA_Emulation_Test.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+M3UA_Emulation_Test.o: /usr/include/_G_config.h /usr/include/wchar.h
+M3UA_Emulation_Test.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+M3UA_Emulation_Test.o: /usr/include/bits/stdio_lim.h
+M3UA_Emulation_Test.o: /usr/include/bits/sys_errlist.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+M3UA_Emulation_Test.o: /usr/include/stdlib.h /usr/include/sys/types.h
+M3UA_Emulation_Test.o: /usr/include/time.h /usr/include/endian.h
+M3UA_Emulation_Test.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+M3UA_Emulation_Test.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+M3UA_Emulation_Test.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+M3UA_Emulation_Test.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+M3UA_Emulation_Test.o: /usr/include/sys/time.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+M3UA_Emulation_Test.o: /usr/include/regex.h
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+M3UA_Emulation_Test.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+M3UA_Emulation_Test.o: M3UA_Emulation.hh M3UA_Types.hh SCTPasp_PortType.hh
+M3UA_Emulation_Test.o: SCTPasp_Types.hh SCTPasp_PT.hh
+M3UA_Emulation_Test.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+M3UA_Emulation_Test.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+M3UA_Emulation_Test.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
+M3UA_Emulation_Test.o: /usr/include/bits/local_lim.h
+M3UA_Emulation_Test.o: /usr/include/linux/limits.h
+M3UA_Emulation_Test.o: /usr/include/bits/posix2_lim.h
+M3UA_Emulation_Test.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
+M3UA_Emulation_Test.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
+M3UA_Emulation_Test.o: /usr/include/stdint.h /usr/include/bits/in.h
+M3UA_Emulation_Test.o: /usr/include/bits/byteswap.h
+M3UA_Emulation_Test.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h
+M3UA_Emulation_Test.o: /usr/include/linux/types.h
+M3UA_Emulation_Test.o: /usr/include/linux/posix_types.h
+M3UA_Emulation_Test.o: /usr/include/linux/stddef.h
+M3UA_Emulation_Test.o: /usr/include/linux/compiler.h
+M3UA_Emulation_Test.o: /usr/include/asm/posix_types.h
+M3UA_Emulation_Test.o: /usr/include/asm/types.h MTP3asp_Types.hh
+M3UA_Types.o: M3UA_Types.hh General_Types.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+M3UA_Types.o: /usr/include/string.h /usr/include/features.h
+M3UA_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+M3UA_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+M3UA_Types.o: /usr/include/stdio.h /usr/include/bits/types.h
+M3UA_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+M3UA_Types.o: /usr/include/_G_config.h /usr/include/wchar.h
+M3UA_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+M3UA_Types.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h
+M3UA_Types.o: /usr/include/sys/types.h /usr/include/time.h
+M3UA_Types.o: /usr/include/endian.h /usr/include/bits/endian.h
+M3UA_Types.o: /usr/include/sys/select.h /usr/include/bits/select.h
+M3UA_Types.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+M3UA_Types.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
+M3UA_Types.o: /usr/include/alloca.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+M3UA_Types.o: /usr/include/sys/time.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+M3UA_Types.o: /usr/include/regex.h
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+M3UA_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+SCTPasp_PortType.o: SCTPasp_PortType.hh SCTPasp_Types.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+SCTPasp_PortType.o: /usr/include/string.h /usr/include/features.h
+SCTPasp_PortType.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+SCTPasp_PortType.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+SCTPasp_PortType.o: /usr/include/stdio.h /usr/include/bits/types.h
+SCTPasp_PortType.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+SCTPasp_PortType.o: /usr/include/_G_config.h /usr/include/wchar.h
+SCTPasp_PortType.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+SCTPasp_PortType.o: /usr/include/bits/stdio_lim.h
+SCTPasp_PortType.o: /usr/include/bits/sys_errlist.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+SCTPasp_PortType.o: /usr/include/stdlib.h /usr/include/sys/types.h
+SCTPasp_PortType.o: /usr/include/time.h /usr/include/endian.h
+SCTPasp_PortType.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+SCTPasp_PortType.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+SCTPasp_PortType.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+SCTPasp_PortType.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+SCTPasp_PortType.o: /usr/include/sys/time.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+SCTPasp_PortType.o: /usr/include/regex.h
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+SCTPasp_PortType.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh SCTPasp_PT.hh
+SCTPasp_PortType.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+SCTPasp_PortType.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+SCTPasp_PortType.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
+SCTPasp_PortType.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
+SCTPasp_PortType.o: /usr/include/bits/posix2_lim.h
+SCTPasp_PortType.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
+SCTPasp_PortType.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
+SCTPasp_PortType.o: /usr/include/stdint.h /usr/include/bits/in.h
+SCTPasp_PortType.o: /usr/include/bits/byteswap.h
+SCTPasp_PortType.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h
+SCTPasp_PortType.o: /usr/include/linux/types.h
+SCTPasp_PortType.o: /usr/include/linux/posix_types.h
+SCTPasp_PortType.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h
+SCTPasp_PortType.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
+SCTPasp_Types.o: SCTPasp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+SCTPasp_Types.o: /usr/include/string.h /usr/include/features.h
+SCTPasp_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+SCTPasp_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+SCTPasp_Types.o: /usr/include/stdio.h /usr/include/bits/types.h
+SCTPasp_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+SCTPasp_Types.o: /usr/include/_G_config.h /usr/include/wchar.h
+SCTPasp_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+SCTPasp_Types.o: /usr/include/bits/stdio_lim.h
+SCTPasp_Types.o: /usr/include/bits/sys_errlist.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+SCTPasp_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h
+SCTPasp_Types.o: /usr/include/time.h /usr/include/endian.h
+SCTPasp_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+SCTPasp_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+SCTPasp_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+SCTPasp_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+SCTPasp_Types.o: /usr/include/sys/time.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+SCTPasp_Types.o: /usr/include/regex.h
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+SCTPasp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+MTP3asp_Types.o: MTP3asp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+MTP3asp_Types.o: /usr/include/string.h /usr/include/features.h
+MTP3asp_Types.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+MTP3asp_Types.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+MTP3asp_Types.o: /usr/include/stdio.h /usr/include/bits/types.h
+MTP3asp_Types.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+MTP3asp_Types.o: /usr/include/_G_config.h /usr/include/wchar.h
+MTP3asp_Types.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+MTP3asp_Types.o: /usr/include/bits/stdio_lim.h
+MTP3asp_Types.o: /usr/include/bits/sys_errlist.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/sys/types.h
+MTP3asp_Types.o: /usr/include/time.h /usr/include/endian.h
+MTP3asp_Types.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+MTP3asp_Types.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+MTP3asp_Types.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+MTP3asp_Types.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+MTP3asp_Types.o: /usr/include/sys/time.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+MTP3asp_Types.o: /usr/include/regex.h
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+MTP3asp_Types.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+Abstract_Socket.o: Abstract_Socket.hh /usr/include/sys/socket.h
+Abstract_Socket.o: /usr/include/features.h /usr/include/sys/cdefs.h
+Abstract_Socket.o: /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h
+Abstract_Socket.o: /usr/include/gnu/stubs-32.h /usr/include/sys/uio.h
+Abstract_Socket.o: /usr/include/sys/types.h /usr/include/bits/types.h
+Abstract_Socket.o: /usr/include/bits/typesizes.h /usr/include/time.h
+Abstract_Socket.o: /usr/include/endian.h /usr/include/bits/endian.h
+Abstract_Socket.o: /usr/include/sys/select.h /usr/include/bits/select.h
+Abstract_Socket.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+Abstract_Socket.o: /usr/include/sys/sysmacros.h
+Abstract_Socket.o: /usr/include/bits/pthreadtypes.h /usr/include/bits/uio.h
+Abstract_Socket.o: /usr/include/bits/socket.h /usr/include/limits.h
+Abstract_Socket.o: /usr/include/bits/posix1_lim.h
+Abstract_Socket.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
+Abstract_Socket.o: /usr/include/bits/posix2_lim.h
+Abstract_Socket.o: /usr/include/bits/sockaddr.h /usr/include/asm/socket.h
+Abstract_Socket.o: /usr/include/asm/sockios.h /usr/include/netinet/in.h
+Abstract_Socket.o: /usr/include/stdint.h /usr/include/bits/wchar.h
+Abstract_Socket.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+Abstract_Socket.o: /usr/include/string.h /usr/include/stdio.h
+Abstract_Socket.o: /usr/include/libio.h /usr/include/_G_config.h
+Abstract_Socket.o: /usr/include/wchar.h /usr/include/gconv.h
+Abstract_Socket.o: /usr/include/bits/stdio_lim.h
+Abstract_Socket.o: /usr/include/bits/sys_errlist.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+Abstract_Socket.o: /usr/include/stdlib.h /usr/include/alloca.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+Abstract_Socket.o: /usr/include/sys/time.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+Abstract_Socket.o: /usr/include/regex.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+Abstract_Socket.o: /usr/include/unistd.h /usr/include/bits/posix_opt.h
+Abstract_Socket.o: /usr/include/bits/confname.h /usr/include/getopt.h
+Abstract_Socket.o: /usr/include/strings.h /usr/include/errno.h
+Abstract_Socket.o: /usr/include/bits/errno.h /usr/include/linux/errno.h
+Abstract_Socket.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h
+Abstract_Socket.o: /usr/include/asm-generic/errno-base.h /usr/include/netdb.h
+Abstract_Socket.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h
+Abstract_Socket.o: /usr/include/sys/stat.h /usr/include/bits/stat.h
+Abstract_Socket.o: /usr/include/netinet/tcp.h /usr/include/arpa/inet.h
+Abstract_Socket.o: /usr/include/fcntl.h /usr/include/bits/fcntl.h
+Abstract_Socket.o: /usr/local/TTCNv3-1.7.pl0/include/memory.h
+BICC_EncDec.o: BICC_Types.hh General_Types.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+BICC_EncDec.o: /usr/include/string.h /usr/include/features.h
+BICC_EncDec.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+BICC_EncDec.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+BICC_EncDec.o: /usr/include/stdio.h /usr/include/bits/types.h
+BICC_EncDec.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+BICC_EncDec.o: /usr/include/_G_config.h /usr/include/wchar.h
+BICC_EncDec.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+BICC_EncDec.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h
+BICC_EncDec.o: /usr/include/sys/types.h /usr/include/time.h
+BICC_EncDec.o: /usr/include/endian.h /usr/include/bits/endian.h
+BICC_EncDec.o: /usr/include/sys/select.h /usr/include/bits/select.h
+BICC_EncDec.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+BICC_EncDec.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
+BICC_EncDec.o: /usr/include/alloca.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+BICC_EncDec.o: /usr/include/sys/time.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+BICC_EncDec.o: /usr/include/regex.h
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+BICC_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+SCTPasp_PT.o: SCTPasp_PT.hh SCTPasp_PortType.hh SCTPasp_Types.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+SCTPasp_PT.o: /usr/include/string.h /usr/include/features.h
+SCTPasp_PT.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+SCTPasp_PT.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+SCTPasp_PT.o: /usr/include/stdio.h /usr/include/bits/types.h
+SCTPasp_PT.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+SCTPasp_PT.o: /usr/include/_G_config.h /usr/include/wchar.h
+SCTPasp_PT.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+SCTPasp_PT.o: /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh /usr/include/stdlib.h
+SCTPasp_PT.o: /usr/include/sys/types.h /usr/include/time.h
+SCTPasp_PT.o: /usr/include/endian.h /usr/include/bits/endian.h
+SCTPasp_PT.o: /usr/include/sys/select.h /usr/include/bits/select.h
+SCTPasp_PT.o: /usr/include/bits/sigset.h /usr/include/bits/time.h
+SCTPasp_PT.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h
+SCTPasp_PT.o: /usr/include/alloca.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+SCTPasp_PT.o: /usr/include/sys/time.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+SCTPasp_PT.o: /usr/include/regex.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
+SCTPasp_PT.o: /usr/include/sys/socket.h /usr/include/sys/uio.h
+SCTPasp_PT.o: /usr/include/bits/uio.h /usr/include/bits/socket.h
+SCTPasp_PT.o: /usr/include/limits.h /usr/include/bits/posix1_lim.h
+SCTPasp_PT.o: /usr/include/bits/local_lim.h /usr/include/linux/limits.h
+SCTPasp_PT.o: /usr/include/bits/posix2_lim.h /usr/include/bits/sockaddr.h
+SCTPasp_PT.o: /usr/include/asm/socket.h /usr/include/asm/sockios.h
+SCTPasp_PT.o: /usr/include/netinet/in.h /usr/include/stdint.h
+SCTPasp_PT.o: /usr/include/bits/in.h /usr/include/bits/byteswap.h
+SCTPasp_PT.o: /usr/local/lksctp-tools-1.0.6/include/netinet/sctp.h
+SCTPasp_PT.o: /usr/include/linux/types.h /usr/include/linux/posix_types.h
+SCTPasp_PT.o: /usr/include/linux/stddef.h /usr/include/linux/compiler.h
+SCTPasp_PT.o: /usr/include/asm/posix_types.h /usr/include/asm/types.h
+SCTPasp_PT.o: /usr/include/arpa/inet.h /usr/include/unistd.h
+SCTPasp_PT.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h
+SCTPasp_PT.o: /usr/include/getopt.h /usr/include/netdb.h
+SCTPasp_PT.o: /usr/include/rpc/netdb.h /usr/include/bits/netdb.h
+SCTPasp_PT.o: /usr/local/TTCNv3-1.7.pl0/include/memory.h /usr/include/fcntl.h
+SCTPasp_PT.o: /usr/include/bits/fcntl.h /usr/include/errno.h
+SCTPasp_PT.o: /usr/include/bits/errno.h /usr/include/linux/errno.h
+SCTPasp_PT.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h
+SCTPasp_PT.o: /usr/include/asm-generic/errno-base.h
+MTP3asp_EncDec.o: MTP3asp_Types.hh /usr/local/TTCNv3-1.7.pl0/include/TTCN3.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/version.h
+MTP3asp_EncDec.o: /usr/include/string.h /usr/include/features.h
+MTP3asp_EncDec.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h
+MTP3asp_EncDec.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-32.h
+MTP3asp_EncDec.o: /usr/include/stdio.h /usr/include/bits/types.h
+MTP3asp_EncDec.o: /usr/include/bits/typesizes.h /usr/include/libio.h
+MTP3asp_EncDec.o: /usr/include/_G_config.h /usr/include/wchar.h
+MTP3asp_EncDec.o: /usr/include/bits/wchar.h /usr/include/gconv.h
+MTP3asp_EncDec.o: /usr/include/bits/stdio_lim.h
+MTP3asp_EncDec.o: /usr/include/bits/sys_errlist.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Basetype.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Types.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Encdec.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Template.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Integer.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Optional.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/BER.hh
+MTP3asp_EncDec.o: /usr/include/stdlib.h /usr/include/sys/types.h
+MTP3asp_EncDec.o: /usr/include/time.h /usr/include/endian.h
+MTP3asp_EncDec.o: /usr/include/bits/endian.h /usr/include/sys/select.h
+MTP3asp_EncDec.o: /usr/include/bits/select.h /usr/include/bits/sigset.h
+MTP3asp_EncDec.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h
+MTP3asp_EncDec.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Logger.hh
+MTP3asp_EncDec.o: /usr/include/sys/time.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Textbuf.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Error.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Parameters.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Float.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Boolean.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Null.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Objid.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Verdicttype.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Component.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Bitstring.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/RAW.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Hexstring.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Octetstring.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_Any.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Charstring.hh
+MTP3asp_EncDec.o: /usr/include/regex.h
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Universal_charstring.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Struct_of.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Array.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_CharacterString.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_External.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/ASN_EmbeddedPDV.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Addfunc.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Timer.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Port.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Module_list.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Snapshot.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Default.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/Runtime.hh
+MTP3asp_EncDec.o: /usr/local/TTCNv3-1.7.pl0/include/TEXT.hh
diff --git a/M3UA_CNL113537/demo/SCTPasp_PT.cc b/M3UA_CNL113537/demo/SCTPasp_PT.cc
new file mode 120000
index 0000000..2b931e9
--- /dev/null
+++ b/M3UA_CNL113537/demo/SCTPasp_PT.cc
@@ -0,0 +1 @@
+../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PT.cc
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/SCTPasp_PT.hh b/M3UA_CNL113537/demo/SCTPasp_PT.hh
new file mode 120000
index 0000000..e37473f
--- /dev/null
+++ b/M3UA_CNL113537/demo/SCTPasp_PT.hh
@@ -0,0 +1 @@
+../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PT.hh
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn b/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn
new file mode 120000
index 0000000..4394e34
--- /dev/null
+++ b/M3UA_CNL113537/demo/SCTPasp_PortType.ttcn
@@ -0,0 +1 @@
+../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/SCTPasp_Types.ttcn b/M3UA_CNL113537/demo/SCTPasp_Types.ttcn
new file mode 120000
index 0000000..71876a0
--- /dev/null
+++ b/M3UA_CNL113537/demo/SCTPasp_Types.ttcn
@@ -0,0 +1 @@
+../../../TestPorts/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn
\ No newline at end of file
diff --git a/M3UA_CNL113537/demo/m3ua_emu.cfg b/M3UA_CNL113537/demo/m3ua_emu.cfg
new file mode 100644
index 0000000..9533515
--- /dev/null
+++ b/M3UA_CNL113537/demo/m3ua_emu.cfg
@@ -0,0 +1,21 @@
+[LOGGING]
+LogSourceInfo := Yes
+FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+
+[EXECUTE]
+M3UA_Emulation_Test.tc_M3UA_demo_bicc
+
+[TESTPORT_PARAMETERS]
+system.SCTP_PORT.debug := "yes"
+
+[MODULE_PARAMETERS]
+M3UA_Emulation.tsp_logVerbose := true;
+M3UA_Emulation.tsp_M3UA_Server_Mode := false;
+M3UA_Emulation_Test.tsp_address :=
+{
+  local_sctp_port   := 2905,
+  local_ip_addr  := "10.6.70.19",
+  remote_sctp_port  := 2905,
+  remote_ip_addr := "159.107.193.33"
+}
diff --git a/M3UA_CNL113537/src/M3UA_Emulation.ttcn b/M3UA_CNL113537/src/M3UA_Emulation.ttcn
new file mode 100644
index 0000000..7a4a7e9
--- /dev/null
+++ b/M3UA_CNL113537/src/M3UA_Emulation.ttcn
@@ -0,0 +1,1307 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2009                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         M3UA_Emulation.ttcn
+//  Reference:    M3UA Protocol Emulation
+//  Rev:          R1B01
+//  Prodnr:       CNL 113 537
+//  Updated:      2009-01-06
+//  Contact:      http://ttcn.ericsson.se
+
+module M3UA_Emulation
+{
+
+modulepar
+{
+  boolean tsp_logVerbose := false;
+  float tsp_Timer := 2.0;                     // General timer used in M3UA emulation.
+  float tsp_ASPUP_Resend_Timer := 2.0;
+  float tsp_ASPAC_Resend_Timer := 2.0;
+  float tsp_Assoc_Restart_Timer := 60.0;
+  float tsp_Heartbeat_Timer := 30.0;
+  integer tsp_SCTP_PayloadProtocolID := 3;    // 3 for M3UA.
+  boolean tsp_Enable_M3UA_Heartbeat := false; // Send SCTP packets periodically.
+  boolean tsp_SCTP_Server_Mode := false;
+  boolean tsp_M3UA_Server_Mode := false;
+}
+
+import from General_Types all;
+import from M3UA_Types all;
+import from SCTPasp_Types all;
+import from SCTPasp_PortType all;
+import from MTP3asp_Types all;
+
+type record of ASP_MTP3_TRANSFERreq TRANSFERreq_Buffer;
+
+type record SCTP_Association_Address
+{
+  integer local_sctp_port,
+  charstring local_ip_addr,
+  integer remote_sctp_port,
+  charstring remote_ip_addr
+}
+
+// Definition of M3UA_Entity which contains M3UA entity data.
+type record M3UA_Entity
+{
+  M3UA_CommStatus commStatus optional,
+  integer sCTP_Assoc_ID optional,
+  SCTP_Association_Address assoc
+}
+
+// Type for status of SCTP communication for an M3UA entity.
+type enumerated M3UA_CommStatus
+{
+  aSP_Down_initial_State (0),
+  aSP_Down_sCTP_Initialize_Done (1),
+  aSP_Down_sCTP_Associate_done (2),
+  aSP_Down_commUP_Received (3),
+  aSP_Down_ASPUP_Sent (4),
+  aSP_Inactive (5),
+  aSP_Inact_ASPAC_Sent (6),
+  aSP_Active (7) // aSPAC_Ack_Received
+}
+
+// We need an internal port to communicate with the MTP3 side.
+// internal in name
+type port MTP3asp_SP_PT_Int message
+{
+  in ASP_MTP3_TRANSFERreq;
+  out ASP_MTP3_TRANSFERind;
+  // out ASP_MTP3_PAUSE;
+  // out ASP_MTP3_RESUME;
+  // out ASP_MTP3_STATUS;  
+} with {
+  extension "internal"
+}
+
+// M3UA emulation component.
+type component M3UA_CT
+{
+  var M3UA_Entity v_Entity;
+  var TRANSFERreq_Buffer v_TRANSFERreq_Buffer := {};
+
+  var ASP_SCTP v_ASP_SCTP;
+  var ASP_SCTP_SEND_FAILED v_ASP_SCTP_SEND_FAILED;
+  var ASP_SCTP_RESULT v_ASP_SCTP_RESULT;
+  var ASP_SCTP_Connected v_ASP_SCTP_Connected;
+  var ASP_SCTP_ASSOC_CHANGE v_ASP_SCTP_ASSOC_CHANGE;
+  var ASP_SCTP_SHUTDOWN_EVENT v_ASP_SCTP_SHUTDOWN_EVENT;
+
+  var PDU_M3UA v_PDU_M3UA;
+
+  // Component timers.
+  timer T_Timer := tsp_Timer;
+  timer T_ASPUP_resend := tsp_ASPUP_Resend_Timer;
+  timer T_ASPAC_resend := tsp_ASPAC_Resend_Timer;
+  timer T_Heartbeat := tsp_Heartbeat_Timer;
+  timer T_Assoc_restart := tsp_Assoc_Restart_Timer;
+  
+  // Port declarations.
+  port MTP3asp_SP_PT_Int MTP3_SP_PORT; // Port towards MTP3/M3UA.
+  port SCTPasp_PT SCTP_PORT;           // Port towards target through SCTP.
+}
+
+//********************************
+// Start of SCTP related templates
+//********************************
+template ASP_SCTP t_S_SCTP_Send
+  (in template integer pl_associationID,
+   in template integer pl_streamID,
+   in template octetstring pl_userData,
+   in template integer pl_protocolID) :=
+{
+  client_id := pl_associationID,
+  sinfo_stream := pl_streamID,
+  sinfo_ppid := pl_protocolID,
+  data := pl_userData
+}
+
+template ASP_SCTP_SEND_FAILED t_ASP_SCTP_SEND_FAILED
+  (in template integer pl_streamID) :=
+{
+  client_id := pl_streamID
+}
+
+template ASP_SCTP_Listen t_ASP_SCTP_Listen
+  (template charstring pl_local_hostname,
+   template integer pl_local_portnumber) :=
+{
+  local_hostname := pl_local_hostname,
+  local_portnumber := pl_local_portnumber
+}
+
+template ASP_SCTP_Connected tr_ASP_SCTP_Connected
+  (template integer pl_client_id,
+   template charstring pl_local_hostname,
+   template integer pl_local_portnumber,
+   template charstring pl_peer_hostname,
+   template integer pl_peer_portnumber) :=
+{
+  client_id := pl_client_id,
+  local_hostname := pl_local_hostname,
+  local_portnumber := pl_local_portnumber,
+  peer_hostname := pl_peer_hostname,
+  peer_portnumber := pl_peer_portnumber
+}
+
+template ASP_SCTP_ConnectFrom t_ASP_SCTP_ConnectFrom
+  (template charstring pl_local_hostname,
+   template integer pl_local_portnumber,
+   template charstring pl_peer_hostname,
+   template integer pl_peer_portnumber) :=
+{
+  local_hostname := pl_local_hostname,
+  local_portnumber := pl_local_portnumber,
+  peer_hostname := pl_peer_hostname,
+  peer_portnumber := pl_peer_portnumber
+}
+
+template ASP_SCTP_RESULT t_ASP_SCTP_RESULT
+  (template integer pl_client_id,
+   template boolean pl_error_status,
+   template charstring pl_error_message) :=
+{
+  client_id := pl_client_id,
+  error_status := pl_error_status,
+  error_message := pl_error_message
+}
+
+template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CommunicationUp
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID,
+  sac_state := SCTP_COMM_UP
+}
+
+template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CommunicationLost
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID,
+  sac_state := SCTP_COMM_LOST
+}
+
+template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_ShutdownComplete
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID,
+  sac_state := SCTP_SHUTDOWN_COMP
+}
+
+template ASP_SCTP_SHUTDOWN_EVENT tr_S_SCTP_ShutdownEvent
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID
+}
+
+template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_Restart
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID,
+  sac_state := SCTP_RESTART
+}
+
+template ASP_SCTP_ASSOC_CHANGE tr_S_SCTP_CANT_STR_ASSOC
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID,
+  sac_state := SCTP_CANT_STR_ASSOC
+}
+
+template ASP_SCTP tr_S_SCTP_DataArrive
+  (in template integer pl_associationID,
+   in template integer pl_streamID,
+   in template integer pl_protocolID,
+   in template PDU_SCTP pl_data) :=
+{
+  client_id := pl_associationID,
+  sinfo_stream := pl_streamID,
+  sinfo_ppid := pl_protocolID,
+  data := pl_data
+}
+
+template ASP_SCTP_Close t_ASP_SCTP_Close
+  (in template integer pl_associationID) :=
+{
+  client_id := pl_associationID
+}
+//******************************
+// End of SCTP related templates
+//******************************
+
+//*****************************
+// Start of M3UA PDU templates.
+//*****************************
+template PDU_M3UA t_PDU_M3UA_ASPUP
+  (in template M3UA_ASP_Identifier pl_aSP_Identifier,
+   in template M3UA_Info_String pl_info_String) :=
+{
+  m3UA_ASPUP := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0301'O,
+    messageLength := 0,
+    messageParameters := {
+      aSP_Identifier := pl_aSP_Identifier,
+      info_String := pl_info_String
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPUP_Ack :=
+{
+  m3UA_ASPUP_Ack := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0304'O,
+    messageLength := 0,
+    messageParameters := {
+      info_String := omit
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPDN :=
+{
+  m3UA_ASPDN := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0302'O,
+    messageLength := 0,
+    messageParameters := {
+      info_String := omit
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPDN_Ack :=
+{
+  m3UA_ASPDN_Ack := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0305'O,
+    messageLength := 0,
+    messageParameters := {
+      info_String := omit
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPAC
+  (in template M3UA_Traffic_Mode_Type pl_traffic_Mode_Type,
+   in template M3UA_Routing_Context pl_routing_Context,
+   in template M3UA_Info_String pl_info_String) :=
+{
+  m3UA_ASPAC := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0401'O,
+    messageLength := 0,
+    messageParameters := {
+      traffic_Mode_Type := pl_traffic_Mode_Type,
+      routing_Context := pl_routing_Context,
+      info_String := pl_info_String
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPAC_Ack
+  (in template M3UA_Traffic_Mode_Type pl_traffic_mode_type,
+   in template M3UA_Routing_Context pl_routing_Context) :=
+{
+  m3UA_ASPAC_Ack := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0403'O,
+    messageLength := 0,
+    messageParameters := {
+      traffic_Mode_Type := pl_traffic_mode_type,
+      routing_Context := pl_routing_Context,
+      info_String := omit
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPIA
+  (in template M3UA_Routing_Context pl_routing_Context,
+   in template M3UA_Info_String pl_info_String) :=
+{
+  m3UA_ASPIA := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0402'O,
+    messageLength := 0,
+    messageParameters := {
+      routing_Context := pl_routing_Context,
+      info_String := pl_info_String
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_ASPIA_Ack
+  (in template M3UA_Routing_Context pl_routing_Context) :=
+{
+  m3UA_ASPIA_Ack := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0404'O,
+    messageLength := 0,
+    messageParameters := {
+      routing_Context := pl_routing_Context,
+      info_String := omit
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_Heartbeat
+  (in template M3UA_Heartbeat_Data pl_heartbeat_Data) :=
+{
+  m3UA_BEAT := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0303'O,
+    messageLength := 0,
+    messageParameters := {
+      heartbeat_Data := pl_heartbeat_Data
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_Beat_Ack
+  (in template M3UA_Heartbeat_Data pl_heartbeat_Data) :=
+{
+  m3UA_BEAT_Ack := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0306'O,
+    messageLength := 0,
+    messageParameters := {
+      heartbeat_Data := pl_heartbeat_Data
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_DATA
+  (in template M3UA_Network_Appearance pl_network_Appearance,
+   in template M3UA_Routing_Context pl_routing_Context,
+   in template M3UA_Protocol_Data pl_protocol_Data,
+   in template M3UA_Correlation_ID pl_correlation_ID) :=
+{
+  m3UA_DATA := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0101'O,
+    messageLength := 0,
+    messageParameters := {
+      network_Appearance := pl_network_Appearance,
+      routing_Context := pl_routing_Context,
+      protocol_Data := pl_protocol_Data,
+      correlation_ID := pl_correlation_ID
+    }
+  }
+}
+
+template PDU_M3UA t_PDU_M3UA_DAVA
+  (in template M3UA_Network_Appearance pl_network_Appearance,
+   in template M3UA_Routing_Context pl_routing_Context,
+   in template M3UA_Affected_Point_Codes pl_affected_Point_Codes,
+   in template M3UA_Info_String pl_info_String) :=
+{
+  m3UA_DAVA := {
+    version := '01'O,
+    reserved := '00'O,
+    messageClassAndType := '0202'O,
+    messageLength := 0,
+    messageParameters := {
+      network_Appearance := pl_network_Appearance,
+      routing_Context := pl_routing_Context,
+      affected_Point_Codes := pl_affected_Point_Codes,
+      info_String := pl_info_String
+    }    
+  }
+}
+//**************************
+// End of M3UA PDU templates
+//**************************
+
+//**********************************
+// Start of M3UA parameter templates
+//**********************************
+template M3UA_Protocol_Data t_M3UA_Protocol_Data
+  (template OCT4 pl_oPC,
+   template OCT4 pl_dPC,
+   template OCT1 pl_sI,
+   template OCT1 pl_nI,
+   template OCT1 pl_mP,
+   template OCT1 pl_sLS,
+   template octetstring pl_userProtocolData) :=
+{
+  tag := '0210'O,
+  lengthInd := 0,
+  oPC := pl_oPC,
+  dPC := pl_dPC,
+  sI := pl_sI,
+  nI := pl_nI,
+  mP := pl_mP,
+  sLS := pl_sLS,
+  userProtocolData := pl_userProtocolData
+}
+//********************************
+// End of M3UA parameter templates
+//********************************
+
+//***********************************
+// Dynamic part of the M3UA emulation
+//***********************************
+
+function f_M3UA_Emulation(SCTP_Association_Address pl_Boot) runs on M3UA_CT
+{
+  // Initialize parameters from the test case.
+  v_Entity.assoc := pl_Boot;
+  v_Entity.commStatus := aSP_Down_initial_State;
+
+  // At this point, we assume that the ports are already connected and mapped
+  // properly by the user.
+  log("*************************************************");
+  log("M3UA emulation initiated, the test can be started");
+  log("*************************************************");
+  
+  f_Initialize_SCTP();
+
+  // Start the main function in an infinte loop.
+  f_M3UA_ScanEvents();
+}
+
+// Initialize the SCTP layer with parameters read from the configuration file.
+// We have only a single association.
+function f_Initialize_SCTP() runs on M3UA_CT
+{
+  v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done;
+  if (tsp_SCTP_Server_Mode) {
+    // Send out a LISTEN message.  The communication status doesn't change
+    // here.
+    SCTP_PORT.send
+      (t_ASP_SCTP_Listen(v_Entity.assoc.local_ip_addr,
+                         v_Entity.assoc.local_sctp_port));
+  }
+  else {
+    // Send ConnectFrom sequentially, wait for RESULT messages.
+    f_Associate();
+    T_Assoc_restart.start;
+  }
+
+  if (tsp_SCTP_PayloadProtocolID == 3) {
+    if (not tsp_M3UA_Server_Mode) {
+      T_ASPUP_resend.start;
+      T_ASPAC_resend.start;
+    }
+    if (tsp_Enable_M3UA_Heartbeat) {
+      T_Heartbeat.start;
+    }
+  }
+}
+
+// Associate SCTP connection for a M3UA entity.
+function f_Associate() runs on M3UA_CT
+{
+  SCTP_PORT.send(t_ASP_SCTP_ConnectFrom
+    (v_Entity.assoc.local_ip_addr,
+     v_Entity.assoc.local_sctp_port,
+     v_Entity.assoc.remote_ip_addr,
+     v_Entity.assoc.remote_sctp_port));
+
+  T_Timer.start;
+  alt {
+    [] SCTP_PORT.receive(t_ASP_SCTP_RESULT(*, ?, *)) -> value v_ASP_SCTP_RESULT {
+      if (v_ASP_SCTP_RESULT.error_status) {
+        log("Connect failed: ", v_ASP_SCTP_RESULT.error_message);
+      }
+      else {
+        v_Entity.sCTP_Assoc_ID := v_ASP_SCTP_RESULT.client_id;
+        v_Entity.commStatus := aSP_Down_sCTP_Associate_done;
+        log("SCTP_ConnectResult -> connection established from: ",
+          v_Entity.assoc.local_ip_addr, ":", v_Entity.assoc.local_sctp_port,
+          " to server: ", v_Entity.assoc.remote_ip_addr, ":",
+          v_Entity.assoc.remote_sctp_port, " association #",
+	  v_Entity.sCTP_Assoc_ID);
+        if (tsp_logVerbose) {
+          log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to ",
+            v_Entity.commStatus);
+        }
+      }
+      T_Timer.stop;
+    }
+    [] T_Timer.timeout {
+      log("----------------------------------------------");
+      log("No response received to t_ASP_SCTP_ConnectFrom");
+      log("----------------------------------------------");
+      setverdict(fail);
+      // mtc.stop;
+    }
+  }
+}
+
+// Starts M3UA emulation execution.
+function f_M3UA_ScanEvents() runs on M3UA_CT
+{
+  var ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq;
+
+  alt {
+    [] MTP3_SP_PORT.receive(ASP_MTP3_TRANSFERreq : ?)
+      -> value vl_ASP_MTP3_TRANSFERreq {
+      f_Send_MTP3_TRANSFERreq(vl_ASP_MTP3_TRANSFERreq);
+      repeat;
+    }
+    [] as_SCTP_CommunicationUp()
+    [] as_SCTP_DataArrive()
+    [] as_SCTP_Connected()
+    [] as_Unexpected_SCTP_Events()
+    [] as_handleM3UA_timers()
+    [] as_handleSCTP_timers()
+  }
+}
+
+function f_Send_MTP3_TRANSFERreq(ASP_MTP3_TRANSFERreq pl_ASP_MTP3_TRANSFERreq)
+  runs on M3UA_CT
+{
+  if (v_Entity.commStatus == aSP_Active) {
+    if (tsp_SCTP_PayloadProtocolID == 3) { // M3UA
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          1,
+          enc_PDU_M3UA
+            (valueof
+             (t_PDU_M3UA_DATA
+              (omit,
+               omit,
+               t_M3UA_Protocol_Data
+                 (int2oct(pl_ASP_MTP3_TRANSFERreq.opc, 4),               // OPC
+                  int2oct(pl_ASP_MTP3_TRANSFERreq.dpc, 4),               // DPC
+                  bit2oct('0000'B & pl_ASP_MTP3_TRANSFERreq.sio.si),     // SIO
+                  bit2oct('000000'B & pl_ASP_MTP3_TRANSFERreq.sio.ni),
+                  bit2oct('000000'B & pl_ASP_MTP3_TRANSFERreq.sio.prio),
+                  int2oct(pl_ASP_MTP3_TRANSFERreq.sls, 1),               // SLS
+                  pl_ASP_MTP3_TRANSFERreq.data),
+                omit))),
+          tsp_SCTP_PayloadProtocolID));
+    }
+    else { // Non-M3UA
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          1,
+          pl_ASP_MTP3_TRANSFERreq.data,
+          tsp_SCTP_PayloadProtocolID));
+    }
+    if (tsp_logVerbose) {
+      log("MTP3_SP_PORT: ASP_MTP3_TRANSFERreq received -> message sent " &
+          "via SCTP");
+    }
+  }
+  else {
+    // If the SCTP association is not yet running, we have to buffer the data
+    // messages arrived from the MTP3 side.  Sending of buffered data messages
+    // should occure when the SCTP association is up and before sending the
+    // data message in reply for a new ASP_MTP3_TRANSFERreq data message.  The
+    // buffer should be checked before sending.
+    v_TRANSFERreq_Buffer[sizeof(v_TRANSFERreq_Buffer)] :=
+      pl_ASP_MTP3_TRANSFERreq;
+    if (tsp_logVerbose) {
+      log("MTP3_SP_PORT: ASP_MTP3_TRANSFERreq received in an inactive state " &
+          "-> message was buffered");
+    }
+  }
+}
+
+// Handle communication up messages of users which performed associate earlier.
+// We have only one association.
+altstep as_SCTP_CommunicationUp() runs on M3UA_CT
+{
+  [] SCTP_PORT.receive(tr_S_SCTP_CommunicationUp(?))
+    -> value v_ASP_SCTP_ASSOC_CHANGE {
+    if (v_Entity.sCTP_Assoc_ID == v_ASP_SCTP_ASSOC_CHANGE.client_id) {
+      if (v_Entity.commStatus == aSP_Down_sCTP_Associate_done) {
+        v_Entity.commStatus := aSP_Down_commUP_Received;
+        if (tsp_SCTP_PayloadProtocolID != 3) { // Non-M3UA
+          v_Entity.commStatus := aSP_Active;
+          var integer v_i;
+          for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) {
+            log("Sending buffered message #", v_i);
+            f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]);
+          }
+          v_TRANSFERreq_Buffer := {};
+	  // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {});
+        }
+        if (tsp_logVerbose) {
+          log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+	      v_Entity.commStatus);
+	} 
+	if ((not tsp_M3UA_Server_Mode) and
+	    (tsp_SCTP_PayloadProtocolID == 3)) { // M3UA
+	  f_ASPUP_Sending();
+	}
+      }
+      else {
+        if (tsp_logVerbose) {
+          log("SCTP_CommunicationUp received in wrong state (i.e. not after " &
+	      "SCTP_Associate is done) in state: ", v_Entity.commStatus);
+	}
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("Association does not exists, received in CommunicationUp");
+      }
+    }
+    repeat;
+  }
+}
+
+// This altstep handles the data received from SCTP.
+altstep as_SCTP_DataArrive() runs on M3UA_CT
+{
+  [] SCTP_PORT.receive(tr_S_SCTP_DataArrive
+                       (?, // associationID
+                        ?, // streamID
+                        ?, // protocolID
+                        ?  // data
+                      )) -> value v_ASP_SCTP {
+    // Checking the identifier for the association is not necessary, because we
+    // have only only one association.
+    if (f_Assoc_Exists(v_ASP_SCTP.client_id)) {
+      if (tsp_logVerbose) {
+        log("Message received on association #", v_Entity.sCTP_Assoc_ID);
+      }
+      if (tsp_SCTP_PayloadProtocolID == 3) { // M3UA
+        v_PDU_M3UA := dec_PDU_M3UA(v_ASP_SCTP.data);
+        f_handle_M3UA_msg(v_PDU_M3UA);
+      }
+      else { // Non-M3UA
+        f_handle_nonM3UA_msg(v_ASP_SCTP.data);
+      }
+    }
+    else{
+      log("Message received on unknown association #", v_Entity.sCTP_Assoc_ID,
+          " -> closing connection");
+      SCTP_PORT.send(t_ASP_SCTP_Close(v_Entity.sCTP_Assoc_ID));
+      log("SCTP connection closed");
+    }
+    repeat;
+  }
+}
+
+// Handle the SCTP connected messages.  It is sent from the SCTP side and it
+// signals, that we're on the right track to create the association.  This is
+// for server mode.
+altstep as_SCTP_Connected() runs on M3UA_CT
+{
+  [tsp_SCTP_Server_Mode] SCTP_PORT.receive(tr_ASP_SCTP_Connected(?, ?, ?, ?, ?))
+    -> value v_ASP_SCTP_Connected {
+    // Message from the configured endpoint.
+    if ((v_ASP_SCTP_Connected.local_portnumber ==
+         v_Entity.assoc.local_sctp_port) and
+        (v_ASP_SCTP_Connected.local_hostname ==
+         v_Entity.assoc.local_ip_addr) and
+        (v_ASP_SCTP_Connected.peer_portnumber ==
+         v_Entity.assoc.remote_sctp_port) and
+        (v_ASP_SCTP_Connected.peer_hostname ==
+         v_Entity.assoc.remote_ip_addr)) {
+      v_Entity.sCTP_Assoc_ID := v_ASP_SCTP_Connected.client_id;
+      v_Entity.commStatus := aSP_Down_sCTP_Associate_done;
+      log("ASP_SCTP_Connected -> accepted connection from client: ",
+          v_ASP_SCTP_Connected.peer_hostname, ":",
+          v_ASP_SCTP_Connected.peer_portnumber, " on server: ",
+          v_ASP_SCTP_Connected.local_hostname, ":",
+          v_ASP_SCTP_Connected.local_portnumber, " with association #",
+          v_Entity.sCTP_Assoc_ID);
+    }
+    else {
+      log("ASP_SCTP_Connected -> connection from unknown client: ",
+          v_ASP_SCTP_Connected.peer_hostname, ":",
+          v_ASP_SCTP_Connected.peer_portnumber);
+    }
+    repeat;
+  }
+}
+
+// Handle error messages of users.
+altstep as_Unexpected_SCTP_Events() runs on M3UA_CT
+{
+  // Handle communications lost message.  State of user with given index jumps
+  // back to initial state and stays there.  That user will not be able to
+  // communicate anymore.
+  [] SCTP_PORT.receive(tr_S_SCTP_CommunicationLost(?))
+    -> value v_ASP_SCTP_ASSOC_CHANGE {
+    if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) {
+      if (v_Entity.commStatus == aSP_Active) {
+	// MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});
+      }
+      v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done;
+      v_Entity.sCTP_Assoc_ID := omit;
+      if (tsp_logVerbose) {
+        log("SCTP_CommunicationLost received");
+        log("Association #", v_Entity.sCTP_Assoc_ID, " cleared, state " &
+            "changed to: ", v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("Association does not exist, received in CommunicationLost");
+      }
+    }
+    repeat;
+  }
+  [] SCTP_PORT.receive(tr_S_SCTP_ShutdownComplete(?))
+    -> value v_ASP_SCTP_ASSOC_CHANGE {
+    if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) {
+      if (v_Entity.commStatus == aSP_Active) {
+        // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});
+      }
+      v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done;
+      if (tsp_logVerbose) {
+        log("SCTP_ShutdownComplete received");
+	log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+	    v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("Association does not exist, received in ShutdownComplete");
+      }
+    }
+    repeat;
+  }
+  [] SCTP_PORT.receive(tr_S_SCTP_ShutdownEvent(?))
+    -> value v_ASP_SCTP_SHUTDOWN_EVENT {
+    if (f_Assoc_Exists(v_ASP_SCTP_SHUTDOWN_EVENT.client_id)) {
+      if (v_Entity.commStatus == aSP_Active) {
+	// MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});	
+      }
+      v_Entity.commStatus := aSP_Down_sCTP_Initialize_Done;
+      if (tsp_logVerbose) {
+        log("SCTP_ShutdownEvent received");
+	log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+	    v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("Association does not exist, received in ShutdownEvent");
+      }
+    }
+    repeat;
+  }
+  [] SCTP_PORT.receive(tr_ASP_SCTP_Connected(?, ?, ?, ?, ?))
+    -> value v_ASP_SCTP_Connected {
+    log("Unexpected ASP_SCTP_Connected");
+    repeat;
+  }
+  [] SCTP_PORT.receive(tr_S_SCTP_Restart(?)) -> value v_ASP_SCTP_ASSOC_CHANGE {
+    if (f_Assoc_Exists(v_ASP_SCTP_ASSOC_CHANGE.client_id)) {
+      log("SCTP_Restart received");
+      v_Entity.commStatus := aSP_Down_commUP_Received;
+      if (tsp_logVerbose) {
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+	    v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("Association does not exist, received in SCTP_Restart");
+      }
+    }
+    repeat;
+  }
+  [] SCTP_PORT.receive(t_ASP_SCTP_SEND_FAILED(?))
+    -> value v_ASP_SCTP_SEND_FAILED {
+    log("SCTP_Send failed for association #", v_Entity.sCTP_Assoc_ID);
+    if (f_Assoc_Exists(v_ASP_SCTP_SEND_FAILED.client_id)) {
+      // Daemon sends an error status message here.
+      // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});
+    }
+    else {
+      log("Send error received for association that doesn't exist");
+    }
+    repeat;
+  }
+  [] SCTP_PORT.receive(tr_S_SCTP_CANT_STR_ASSOC(?)) {
+    repeat;
+  }
+  [] SCTP_PORT.receive {
+    repeat;
+  }
+}
+
+// After reception of SCTP_CommunicationUp M3UA ASPUP/ASPAC is resent by the
+// entity if it didn't receive ASPUP_Ack/ASPAC_Ack.
+altstep as_handleM3UA_timers() runs on M3UA_CT
+{
+  [] T_ASPUP_resend.timeout {
+    if ((v_Entity.commStatus == aSP_Down_commUP_Received) or
+        (v_Entity.commStatus == aSP_Down_ASPUP_Sent)) {
+      // Try to send ASPUP again.
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP(omit, omit))),
+          tsp_SCTP_PayloadProtocolID));
+      v_Entity.commStatus := aSP_Down_ASPUP_Sent;
+      if (tsp_logVerbose) {
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+          v_Entity.commStatus);
+      }
+    }
+    T_ASPUP_resend.start;
+    repeat;
+  }
+  
+  [] T_ASPAC_resend.timeout {
+    if ((v_Entity.commStatus == aSP_Inactive) or
+        (v_Entity.commStatus == aSP_Inact_ASPAC_Sent)) {
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPAC(omit, omit, omit))),
+          tsp_SCTP_PayloadProtocolID));
+      v_Entity.commStatus := aSP_Inact_ASPAC_Sent;
+      if (tsp_logVerbose) {
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+            v_Entity.commStatus);
+      }
+    }
+    T_ASPAC_resend.start;
+    repeat;
+  }
+  
+  [tsp_Enable_M3UA_Heartbeat] T_Heartbeat.timeout {
+    if (v_Entity.commStatus == aSP_Active) {
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_Heartbeat(omit))),
+          tsp_SCTP_PayloadProtocolID));
+      if (tsp_logVerbose) {
+        log("Heartbeat sent to association #", v_Entity.sCTP_Assoc_ID);
+      }
+    }
+    T_Heartbeat.start;
+    repeat;
+  }
+}
+
+// Handles SCTP timer events.  In server mode we don't associate.
+altstep as_handleSCTP_timers() runs on M3UA_CT
+{
+  [not tsp_SCTP_Server_Mode] T_Assoc_restart.timeout {
+    if (v_Entity.commStatus == aSP_Down_sCTP_Initialize_Done) {
+      f_Associate();
+    }
+    T_Assoc_restart.start;
+    repeat;
+  }
+}
+
+// After reception of SCTP CommunicationUp messages M3UA ASPUP is sent by
+// every entity and the M3UA ASPUP_Ack is received by every entity.
+function f_ASPUP_Sending() runs on M3UA_CT
+{
+  SCTP_PORT.send
+    (t_S_SCTP_Send
+     (v_Entity.sCTP_Assoc_ID,
+      0, // streamID
+      enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP(omit, omit))),
+      tsp_SCTP_PayloadProtocolID));
+  v_Entity.commStatus := aSP_Down_ASPUP_Sent;
+  if (tsp_logVerbose) {
+    log("M3UA_ASPUP sent");
+    log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+        v_Entity.commStatus);
+  }
+}
+
+
+// Test if an association with assocID exists or not.  We have only one
+// association at the moment, we just check if the given assocID is the same,
+// that is associated with our single entity.  If we would have more entities
+// in a table, the index of it should be returned instead of a boolean value.
+function f_Assoc_Exists(integer pl_assocID) runs on M3UA_CT return boolean
+{
+  if (v_Entity.sCTP_Assoc_ID == pl_assocID) {
+    return true;
+  }
+  else {
+    if (tsp_logVerbose) {
+      log("Association #", v_Entity.sCTP_Assoc_ID, " not found");
+    }
+  }
+  return false;
+}
+
+function f_handle_M3UA_msg(PDU_M3UA pl_PDU_M3UA) runs on M3UA_CT
+{
+  if (ischosen(pl_PDU_M3UA.m3UA_DATA)) {
+    if (v_Entity.commStatus == aSP_Active) {
+      // Send ASP_MTP3_TRANSFERind message.
+      MTP3_SP_PORT.send
+        (valueof
+         (tr_ASP_MTP3_TRANSFERind_sio
+          (substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.nI), 6, 2),
+           substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.mP), 6, 2),
+           substr(oct2bit(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.sI), 4, 4),
+           oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.oPC),
+           oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.dPC),
+           oct2int(pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.sLS),
+           pl_PDU_M3UA.m3UA_DATA.messageParameters.protocol_Data.userProtocolData)));
+      if (tsp_logVerbose) {
+        log("MTP3_SP_PORT: Data received -> TRANSFERind sent");
+      }
+    }
+    else {
+      // Buffering indication messages?
+      if (tsp_logVerbose) {
+        log("MTP3_SP_PORT: Data received, no user connected -> discard");
+      }
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_BEAT)) {
+    if (v_Entity.commStatus == aSP_Active) {
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA
+	    (valueof
+             (t_PDU_M3UA_Beat_Ack
+              (pl_PDU_M3UA.m3UA_BEAT.messageParameters.heartbeat_Data))),
+          tsp_SCTP_PayloadProtocolID));
+      if (tsp_logVerbose) {
+        log("M3UA_BEAT received -> M3UA_BEAT_Ack sent");
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_BEAT received in wrong state");
+      }
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_BEAT_Ack)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_BEAT_Ack -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_ERR)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_ERR -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_NOTIFY)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_NOTIFY -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DUNA)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DUNA -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DAVA)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DAVA -> discard");
+    }
+  }
+  // In server mode ASP_M3UA_DAUD messages can be received.  In response the
+  // server must send ASP_M3UA_DAVA messages.  It's not checked if we're
+  // servers or not.
+  else if (ischosen(pl_PDU_M3UA.m3UA_DAUD)) {
+    if ((v_Entity.commStatus == aSP_Inactive) or
+        (v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or
+        (v_Entity.commStatus == aSP_Active)) {
+      // Send ASP_M3UA_DAVA message.
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA
+            (valueof
+             (t_PDU_M3UA_DAVA
+              (pl_PDU_M3UA.m3UA_DAUD.messageParameters.network_Appearance,
+               pl_PDU_M3UA.m3UA_DAUD.messageParameters.routing_Context,
+               pl_PDU_M3UA.m3UA_DAUD.messageParameters.affected_Point_Codes,
+               pl_PDU_M3UA.m3UA_DAUD.messageParameters.info_String))),
+          tsp_SCTP_PayloadProtocolID));
+      if (tsp_logVerbose) {
+        log("M3UA_DAUD received -> DAVA sent");
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_DAUD received in wrong state");
+      }
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_SCON)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_SCON -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DUPU)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DUPU -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DRST)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DRST -> discard");
+    }
+  }
+  // In server mode we can receive M3UA_ASPUP messages.  The answer will be a
+  // M3UA_ASPUP_Ack message to the client.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPUP)) {
+    if (((v_Entity.commStatus == aSP_Down_commUP_Received) or
+        (v_Entity.commStatus == aSP_Down_ASPUP_Sent)) and
+	tsp_M3UA_Server_Mode) {
+      v_Entity.commStatus := aSP_Inactive;
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPUP_Ack)),
+          tsp_SCTP_PayloadProtocolID));
+      if (tsp_logVerbose) {
+        log("M3UA_ASPUP received -> M3UA_ASPUP_Ack sent");
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+          v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_ASPUP received in wrong state or the emulation is not in " &
+	    "M3UA server mode");
+      }
+    }
+  }
+  // Receives a M3UA_ASPDN message and sends a M3UA_ASPDN_Ack message in
+  // response.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPDN)) {
+    if ((v_Entity.commStatus == aSP_Inactive) or
+        (v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or
+        (v_Entity.commStatus == aSP_Active)) {
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPDN_Ack)),
+          tsp_SCTP_PayloadProtocolID));
+      if (v_Entity.commStatus == aSP_Active) {
+        // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});
+      }
+      v_Entity.commStatus := aSP_Down_commUP_Received;
+      if (tsp_logVerbose) {
+        log("M3UA_ASPDN received -> ASPDN_Ack sent");
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+            v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("ASPDN received in wrong state or the emulation is not in M3UA " &
+	    "server mode");
+      }
+    }
+  }
+  // The M3UA client receives M3UA_ASPUP_Ack messages from the server.  In
+  // response of a M3UA_ASPUP message sent by the client.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPUP_Ack)) {
+    if (((v_Entity.commStatus == aSP_Down_ASPUP_Sent) or
+        (v_Entity.commStatus == aSP_Inactive)) and
+	not tsp_M3UA_Server_Mode) {
+      v_Entity.commStatus := aSP_Inactive;
+      if (tsp_logVerbose) {
+        log("M3UA_ASPUP_Ack received -> send M3UA_ASPAC");
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+            v_Entity.commStatus);
+      }
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA(valueof(t_PDU_M3UA_ASPAC(omit, omit, omit))),
+          tsp_SCTP_PayloadProtocolID));
+      // The state changes again after sending the M3UA_ASPAC message.
+      v_Entity.commStatus := aSP_Inact_ASPAC_Sent;
+      if (tsp_logVerbose) {
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+            v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_ASPUP_Ack received in wrong state or the emulation is not " &
+	    "in M3UA client mode");
+      }
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPDN_Ack)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_ASPDN_Ack -> discard");
+    }
+  }
+  // M3UA_ASPAC messages are received on the server side.  The server sends a
+  // M3UA_ASPAC_Ack message back to the client.  This step makes the
+  // association active on both sides.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPAC)) {
+    if (((v_Entity.commStatus == aSP_Inactive) or
+        (v_Entity.commStatus == aSP_Inact_ASPAC_Sent)) and
+	tsp_M3UA_Server_Mode) {
+      v_Entity.commStatus := aSP_Active;
+      if (tsp_logVerbose) {
+        log("M3UA_ASPAC received -> M3UA_ASPAC_Ack sent");
+	log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+	    v_Entity.commStatus);
+      }
+      var integer v_i;
+      for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) {
+        log("Sending buffered message #", v_i);
+        f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]);
+      }
+      v_TRANSFERreq_Buffer := {};
+      // Send M3UA_ASPAC_Ack.
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+	 (v_Entity.sCTP_Assoc_ID,
+	  0,
+	  enc_PDU_M3UA
+	    (valueof
+	     (t_PDU_M3UA_ASPAC_Ack
+	      (pl_PDU_M3UA.m3UA_ASPAC.messageParameters.traffic_Mode_Type,
+	       pl_PDU_M3UA.m3UA_ASPAC.messageParameters.routing_Context))),
+	  tsp_SCTP_PayloadProtocolID));
+      // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {});
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_ASPAC received in wrong state or the emulation is not in " &
+	    "M3UA server mode");
+      }
+    }
+  }
+  // The client receives M3UA_ASPAC_Ack messages from the server.  The
+  // association will be activated.  The buffered messages should be send here.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPAC_Ack)) {
+    if (((v_Entity.commStatus == aSP_Inact_ASPAC_Sent) or
+        (v_Entity.commStatus == aSP_Active)) and
+	not tsp_M3UA_Server_Mode) {
+      // MTP3_SP_PORT.send(ASP_MTP3_RESUME : {});
+      v_Entity.commStatus := aSP_Active;
+      if (tsp_logVerbose) {
+        log("ASPAC_Ack received for association #", v_Entity.sCTP_Assoc_ID);
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+            v_Entity.commStatus);
+      }
+      var integer v_i;
+      for (v_i := 0; v_i < sizeof(v_TRANSFERreq_Buffer); v_i := v_i + 1) {
+        log("Sending buffered message #", v_i);
+        f_Send_MTP3_TRANSFERreq(v_TRANSFERreq_Buffer[v_i]);
+      }
+      v_TRANSFERreq_Buffer := {};
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_ASPAC_Ack received in wrong state on association #",
+            v_Entity.sCTP_Assoc_ID, " or the emulation is not in M3UA " &
+	    "client mode");
+      }
+    }
+  }
+  // Receives a M3UA_ASPIA message and sends back a M3UA_ASPIA_Ack message in
+  // response.
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPIA)) {
+    if (v_Entity.commStatus == aSP_Active) {
+      SCTP_PORT.send
+        (t_S_SCTP_Send
+         (v_Entity.sCTP_Assoc_ID,
+          0,
+          enc_PDU_M3UA
+	    (valueof
+             (t_PDU_M3UA_ASPIA_Ack
+	      (pl_PDU_M3UA.m3UA_ASPIA.messageParameters.routing_Context))),
+          tsp_SCTP_PayloadProtocolID));
+      // MTP3_SP_PORT.send(ASP_MTP3_PAUSE : {});
+      v_Entity.commStatus := aSP_Inactive;
+      if (tsp_logVerbose) {
+        log("M3UA_ASPIA received -> M3UA_ASPIA_Ack sent");
+        log("Association #", v_Entity.sCTP_Assoc_ID, " state changed to: ",
+          v_Entity.commStatus);
+      }
+    }
+    else {
+      if (tsp_logVerbose) {
+        log("M3UA_ASPIA received in wrong state or the emulation is not " &
+	    "running in M3UA server mode");
+      }
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_ASPIA_Ack)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_ASPIA_Ack -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_REG_REQ)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_REG_REQ -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_REG_RSP)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_REG_RSP -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DEREG_REQ)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DEREG_REQ -> discard");
+    }
+  }
+  else if (ischosen(pl_PDU_M3UA.m3UA_DEREG_RSP)) {
+    if (tsp_logVerbose) {
+      log("Received M3UA_DEREG_RSP -> discard");
+    }
+  }
+}
+
+function f_handle_nonM3UA_msg(octetstring pl_PDU) runs on M3UA_CT
+{
+  if (v_Entity.commStatus == aSP_Active) {
+    // Send TRANSFERind message.
+    MTP3_SP_PORT.send(valueof
+                      (tr_ASP_MTP3_TRANSFERind_sio
+                       ('00'B,
+                        '00'B,
+                        '0000'B,
+                        0,
+                        0,
+                        0,
+                        pl_PDU)));
+    if (tsp_logVerbose) {
+      log("Non-M3UA DATA received -> TRANSFERind sent");
+    }
+  }
+  else {
+    if (tsp_logVerbose) {
+      log("DATA received, but no user connected -> discard");
+    }
+  }
+}
+
+}
diff --git a/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd b/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd
new file mode 100644
index 0000000..bc2b89e
--- /dev/null
+++ b/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright Test Competence Center (TCC) ETH 2012
+
+  The copyright to the computer  program(s) herein  is the property of TCC.
+  The program(s) may be used and/or copied only with the written permission
+  of TCC or in accordance with  the terms and conditions  stipulated in the
+  agreement/contract under which the program(s) has been supplied.
+
+
+   File:               MTP3asp_CNL113337.tpd
+   Description:        tpd project file
+   Rev:                R11A01
+   Prodnr:             CNL 113 337
+   Updated:            2012-11-23
+   Contact:            http://ttcn.ericsson.se
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>MTP3asp_CNL113337</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="Abstract_Socket_CNL113384" projectLocationURI="../Common_Components/Abstract_Socket_CNL113384/Abstract_Socket_CNL113384.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="doc" relativeURI="doc"/>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="doc/MTP3asp_CNL113337_FS.pdf" relativeURI="doc/MTP3asp_CNL113337_FS.pdf"/>
+    <FileResource projectRelativePath="doc/MTP3asp_CNL113337_PRI.pdf" relativeURI="doc/MTP3asp_CNL113337_PRI.pdf"/>
+    <FileResource projectRelativePath="doc/MTP3asp_CNL113337_UG.pdf" relativeURI="doc/MTP3asp_CNL113337_UG.pdf"/>
+    <FileResource projectRelativePath="src/MTP3asp_EncDec.cc" relativeURI="src/MTP3asp_EncDec.cc"/>
+    <FileResource projectRelativePath="src/MTP3asp_PT.cc" relativeURI="src/MTP3asp_PT.cc"/>
+    <FileResource projectRelativePath="src/MTP3asp_PT.hh" relativeURI="src/MTP3asp_PT.hh"/>
+    <FileResource projectRelativePath="src/MTP3asp_PortType.ttcn" relativeURI="src/MTP3asp_PortType.ttcn"/>
+    <FileResource projectRelativePath="src/MTP3asp_Types.ttcn" relativeURI="src/MTP3asp_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>TARGET_TEST</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable>
+          <preprocessorDefines>
+            <listItem>TARGET_TEST</listItem>
+          </preprocessorDefines>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+    <Configuration name="TARGET_TEST">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable>
+          <preprocessorDefines>
+            <listItem>TARGET_TEST</listItem>
+          </preprocessorDefines>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+    <Configuration name="NO TARGET_TEST">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/MTP3asp_CNL113337</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PT.cc b/MTP3asp_CNL113337/demo/MTP3asp_PT.cc
new file mode 100644
index 0000000..37bab8f
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/MTP3asp_PT.cc
@@ -0,0 +1,2952 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2012                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PT.cc
+//  Description:  Implementation of port MTP3asp_PT
+//                This test port is written to connect TTCN-3 to SEA according
+//                to specification ITU-T SS7 MTP3, ANSI, TCC, IETF, MPT
+//  Reference:    ITU-T Recommendation Q.704, RFC3332
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2012-05-24
+//  Contact:      http://ttcn.ericsson.se
+
+// IMPORTANT MODIFICATION:
+// mtp3_ttc uses ALWAYS 16 bits long SPCs, regardless of mtp3_ni sio
+
+#include "MTP3asp_PT.hh"
+
+#include "MTP3asp_Types.hh"
+#include "MTP3asp_PortType.hh"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <poll.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+
+
+//  Constans for M3UA, see rfc 3332 and 2/1056-FCPW 101 86/P-1
+// Constants for decoding M3UA common headers
+#define M3UA_VER_OFFS      0
+#define M3UA_CLS_OFFS      2
+#define M3UA_TYP_OFFS      3
+#define M3UA_LGT_OFFS      4
+#define M3UA_MSG_OFFS      8
+#define M3UA_MSG_LENGTH_LENGTH      4
+
+// Constants for M3UA protocol
+//Msg classes
+#define M3UA_MSG_CLS_MGMT 0x00
+#define M3UA_MSG_CLS_TRNSFM 0x01
+#define M3UA_MSG_CLS_SSNM 0x02
+#define M3UA_MSG_CLS_ASPSM 0x03
+#define M3UA_MSG_CLS_ASPTM 0x04
+#define M3UA_MSG_CLS_RKM 0x09
+//Msg types
+#define M3UA_MSG_TYP_MGMT_ERR 0x00
+#define M3UA_MSG_TYP_MGMT_NTFY 0x01
+
+#define M3UA_MSG_TYP_TRSNFM_DATA 0x01
+
+#define M3UA_MSG_TYP_SSNM_DUNA 0x01
+#define M3UA_MSG_TYP_SSNM_DAVA 0x02
+#define M3UA_MSG_TYP_SSNM_DAUD 0x03
+#define M3UA_MSG_TYP_SSNM_SCON 0x04
+#define M3UA_MSG_TYP_SSNM_DUPU 0x05
+#define M3UA_MSG_TYP_SSNM_DRST 0x06
+
+#define M3UA_MSG_TYP_ASPSM_ASPUP 0x01
+#define M3UA_MSG_TYP_ASPSM_ASPDN 0x02
+#define M3UA_MSG_TYP_ASPSM_BEAT 0x03
+#define M3UA_MSG_TYP_ASPSM_ASPUPAck 0x04
+#define M3UA_MSG_TYP_ASPSM_ASPDNAck 0x05
+#define M3UA_MSG_TYP_ASPSM_BEATAck 0x06
+
+#define M3UA_MSG_TYP_ASPTM_ASPAC 0x01
+#define M3UA_MSG_TYP_ASPTM_ASPIA 0x02
+#define M3UA_MSG_TYP_ASPTM_ASPACAck 0x03
+#define M3UA_MSG_TYP_ASPTM_ASPIAAck 0x04
+
+#define M3UA_MSG_TYP_RKM_REGREQ 0x01
+#define M3UA_MSG_TYP_RKM_REGRSP 0x02
+#define M3UA_MSG_TYP_RKM_DEREGREQ 0x03
+#define M3UA_MSG_TYP_RKM_DEREGRESP 0x04
+
+//parameters
+//common for all adaptation layer
+#define PAR_PREFIX_COMMON 0x00
+#define PAR_INFO_STR    0x04
+#define PAR_ROUTING_CTX 0x06
+#define PAR_DIAG_INFO   0x07
+#define PAR_HEART_BEAT  0x09
+#define PAR_TRAFFMODE_T 0x0b
+#define PAR_ERROR_CODE  0x0c
+#define PAR_STATUS      0x0d
+#define PAR_ASP_ID      0x11
+#define PAR_AFFECTED_PC 0x12
+#define PAR_CORREL_ID   0x13
+
+//M3UA specific
+#define PAR_PREFIX_M3UA 0x02
+#define PAR_NETW_APP    0x00
+#define PAR_USR_O_CAUSE 0x04
+#define PAR_CNGST_IND   0x05
+#define PAR_CNCRD_IND   0x06
+#define PAR_ROUTING_KEY 0x07
+#define PAR_REG_RSLT    0x08
+#define PAR_DEREG_RSLT  0x09
+#define PAR_LOC_RK_ID   0x0a
+#define PAR_DPC         0x0b
+#define PAR_SI          0x0c
+#define PAR_OPC_LIST    0x0e
+#define PAR_CIRC_RNG    0x0f
+#define PAR_PROT_DATA   0x10
+#define PAR_REG_STAT    0x12
+#define PAR_DEREG_STAT  0x13
+
+// error codes:
+#define PAR_ERRC_IVER   0x01
+#define PAR_ERRC_UNSMC  0x03
+#define PAR_ERRC_UNSMT  0x04
+#define PAR_ERRC_UNTMT  0x05
+#define PAR_ERRC_UNEM   0x06
+#define PAR_ERRC_PERR   0x07
+#define PAR_ERRC_ISI    0x09
+#define PAR_ERRC_RMB    0x0D
+#define PAR_ERRC_ASPIDR 0x0E
+#define PAR_ERRC_IASPID 0x0F
+#define PAR_ERRC_IPARV  0x11
+#define PAR_ERRC_PARFE  0x12
+#define PAR_ERRC_UPAR   0x13
+#define PAR_ERRC_DSU    0x14
+#define PAR_ERRC_INA    0x15
+#define PAR_ERRC_MP     0x16
+#define PAR_ERRC_IRC    0x19
+#define PAR_ERRC_NCFAS  0x1A
+
+
+// --------------------------
+// Basic Test Port functions
+// --------------------------
+using namespace MTP3asp__Types;
+namespace MTP3asp__PortType {
+
+//external functions
+//##########################################################
+
+//f__MTP3__SEA__connect (for MTP3asp_PT)
+BOOLEAN f__MTP3__SEA__connect(MTP3asp__PT& portRef,
+  const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http)
+{
+  return f__MTP3__SEA__connect__extern(portRef,Hostname,Port,EntityName,Http);
+}
+//------------
+
+//f__MTP3__SEA__disconnect (for MTP3asp_PT)
+BOOLEAN f__MTP3__SEA__disconnect(MTP3asp__PT& portRef)
+{
+  return f__MTP3__SEA__disconnect__extern(portRef);
+}
+//------------
+
+//f__MTP3__SEA__connect__extern
+BOOLEAN f__MTP3__SEA__connect__extern(MTP3asp__PT_PROVIDER& portRef,
+  const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http)
+{
+#ifndef TARGET_TEST
+  if (portRef.dynamicConnection && (!(portRef.connectionUp)))
+  {
+    delete [] portRef.hostname;
+    int len = strlen(Hostname);
+    portRef.hostname = new char[len + 1];
+    memcpy(portRef.hostname, Hostname, len + 1);
+
+    portRef.httpport = Port;
+
+    delete [] portRef.entityname;
+    len = strlen(EntityName);
+    portRef.entityname = new char[len + 1];
+    memcpy(portRef.entityname, EntityName, len + 1);
+
+    if(Http)
+      portRef.MTP3_open_channel(TRUE);
+    else
+      portRef.MTP3_open_channel(FALSE);
+
+    if(portRef.wait_for_open())
+    { 
+      portRef.user_connect();
+      portRef.connectionUp = TRUE;
+      return TRUE;
+    }
+  }
+  else
+#endif
+    portRef.log("Dynamic connection feature is not active or already connected.");
+  return FALSE;
+}
+//------------
+
+//f__MTP3__SEA__disconnect__extern
+BOOLEAN f__MTP3__SEA__disconnect__extern(MTP3asp__PT_PROVIDER& portRef)
+{
+#ifndef TARGET_TEST
+  if (portRef.connectionUp)
+  {
+    portRef.MTP3_close_connection();
+    portRef.connectionUp = FALSE;
+    return TRUE;
+  }
+#endif
+  return FALSE;
+}
+//------------
+
+// Test Port constructor
+MTP3asp__PT_PROVIDER::MTP3asp__PT_PROVIDER(const char *par_port_name)
+        : PORT(par_port_name)
+{
+  MTP_fd=-1;
+  httpport=-1;
+  hostname=NULL;
+  destinationname = NULL;
+  dynamicConnection = FALSE;
+
+  const char *str="b303d76a-266c-11d4-b8f5-08002090d3da";
+  int len = strlen(str);
+  iid_string= new char[len + 1];
+  memcpy(iid_string, str, len + 1);
+
+  entityname=NULL;
+  Filter=Loop=-1;
+  Sut_Pc=Tester_Pc=-1;
+  Ni_is_set = FALSE;
+  MTPServiceType = MTP3itu;
+  M3UA_version = 1;
+  M3UAState = AssocDown; // unnecessary...
+  mtp3_ni=0;
+#ifndef TARGET_TEST
+  user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map;
+  user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+  interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+#endif
+  forward_pause = FALSE;
+  forward_resume = FALSE;
+  forward_status = FALSE;
+}
+//------------
+
+// Test Port destructor
+MTP3asp__PT_PROVIDER::~MTP3asp__PT_PROVIDER()
+{
+  delete [] hostname;
+  delete [] entityname;
+  delete [] iid_string;
+}
+//------------
+
+// set_parameter
+void MTP3asp__PT_PROVIDER::set_parameter(const char *parameter_name,
+        const char *parameter_value)
+{
+  log("set_parameter: %s = %s",parameter_name,parameter_value);
+  if (!strcmp(parameter_name,"Hostname"))
+  {
+    delete [] hostname;
+    int len = strlen(parameter_value);
+    hostname = new char[len + 1];
+    memcpy(hostname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name, "HttpPort"))
+  {
+    httpport = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"EntityName"))
+  {
+    delete [] entityname;
+    int len = strlen(parameter_value);
+    entityname= new char[len + 1];
+    memcpy(entityname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name,"DestinationName"))
+  {
+    delete [] destinationname;
+    int len = strlen(parameter_value);
+    destinationname= new char[len + 1];
+    memcpy(destinationname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name,"Filter"))
+  {
+    if (!strcmp(parameter_value,"ON")) Filter = MTP3_ON;
+    else Filter = MTP3_OFF;
+  }
+  else if (!strcmp(parameter_name,"Loop"))
+  {
+    if (!strcmp(parameter_value,"ON")) Loop = MTP3_ON;
+    else Loop = MTP3_OFF;
+  }
+  else if (!strcmp(parameter_name,"NI"))
+  {
+    Ni_is_set = TRUE;
+    mtp3_ni = atoi(parameter_value);
+    debuglog("Network indicator is set to %i",mtp3_ni);
+  }
+  else if (!strcmp(parameter_name,"SUT_Pc"))
+  {
+    Sut_Pc = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"TESTER_Pc"))
+  {
+    Tester_Pc = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"M3UA_version"))
+  {
+    M3UA_version  = atoi(parameter_value);
+    debuglog("%d",M3UA_version);
+  }
+#ifndef TARGET_TEST
+  else if (!strcmp(parameter_name,"DynamicConnection"))
+  {
+    if (!strcasecmp(parameter_value,"ON"))
+    {
+      dynamicConnection = TRUE;
+    }
+  }
+#endif
+  else if (!strcmp(parameter_name,"MTP3ServiceType"))
+  {
+    if (!strcmp(parameter_value,"TargetM3UA"))
+    {
+#ifndef TARGET_TEST
+      error("TargetM3UA not supported, since TARGET_TEST not in Makefile");
+#else
+      log("MTP3ServiceType is set to TargetM3UA");
+      user_map_p =  &MTP3asp__PT_PROVIDER::Target_user_map;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::Target_user_unmap;
+      MTPServiceType = TargetM3UA;
+#endif
+    }
+    else if (!strcmp(parameter_value,"TargetSTC"))
+    {
+#ifndef TARGET_TEST
+      error("TargetSTC not supported, since TARGET_TEST not in Makefile");
+#else
+      log("MTP3ServiceType is set to TargetSTC");
+      user_map_p =  &MTP3asp__PT_PROVIDER::TargetSTC_user_map;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::Target_user_unmap; //Same as by Target M3UA
+      MTPServiceType = TargetSTC;
+#endif
+    }
+#ifndef TARGET_TEST
+    else if (!strcmp(parameter_value,"M3UA"))
+    { //M3UA
+      log("MTP3ServiceType is set to M3UA");
+      interpreter = &MTP3asp__PT_PROVIDER::M3UA_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::M3UA_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::M3UA_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::M3UA_user_unmap;
+      MTPServiceType = M3UA;
+    }
+    else if (!strcmp(parameter_value,"MTP3itu"))
+    {
+      log("MTP3ServiceType is set to MTP3itu");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3itu;
+    }
+    else if ( !strcmp(parameter_value,"MTP3ansi"))
+    {
+      log("MTP3ServiceType is set to MTP3ansi");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3ansi;
+    }
+    else if ( !strcmp(parameter_value,"MTP3ttc"))
+    {
+      log("MTP3ServiceType is set to MTP3ttc");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3ttc;
+    }
+    else if ( !strcmp(parameter_value,"MTP3mpt"))
+    {
+      log("MTP3ServiceType is set to MTP3mpt");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3mpt;
+    }
+    else if ( !strcmp(parameter_value,"MTP3bttc"))
+    {
+      log("MTP3ServiceType is set to MTP3bttc");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3bttc;
+    }
+    else if ( !strcmp(parameter_value,"MTP3iup"))
+    {
+      log("MTP3ServiceType is set to MTP3iup");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3iup;
+    }
+    else if ( !strcmp(parameter_value,"STC"))
+    {
+      log("MTP3ServiceType is set to STC");
+      interpreter = &MTP3asp__PT_PROVIDER::STC_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::STC_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::STC_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::STC_user_unmap;
+      MTPServiceType = STC;
+    }
+#endif
+    else
+    {
+      log("Unsupported MTP3ServiceType: %s, falling back to MTP3itu",
+          parameter_value);
+    }
+  }
+  else if(strcasecmp(parameter_name, "forward_pause") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_pause = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_pause = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else if(strcasecmp(parameter_name, "forward_resume") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_resume = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_resume = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else if(strcasecmp(parameter_name, "forward_status") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_status = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_status = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else
+#ifdef TARGET_TEST
+  if(!parameter_set(parameter_name ,parameter_value)) //TCP parameters
+#endif
+    log("Unsupported parameter: %s", parameter_name);
+}
+//------------
+
+// User map
+void MTP3asp__PT_PROVIDER::user_map(const char *system_port)
+{
+  if (user_map_p == NULL)
+    error("Parameter MTP3ServiceType should be set to TargetM3UA in TARGET_TEST mode!");
+
+  (this->*user_map_p)(system_port);
+}
+//------------
+
+// User unmap
+void MTP3asp__PT_PROVIDER::user_unmap(const char *system_port)
+{
+  (this->*user_unmap_p)(system_port);
+}
+//------------
+
+#ifndef TARGET_TEST
+// User connect
+void MTP3asp__PT_PROVIDER::user_connect()
+{
+  (this->*user_connect_p)();
+}
+//------------
+#endif
+
+//User start
+void MTP3asp__PT_PROVIDER::user_start()
+{ debuglog("user start ordered");
+}
+//------------
+
+//User stop
+void MTP3asp__PT_PROVIDER::user_stop()
+{ debuglog("User stop ordered");
+}
+//------------
+
+//Event Handler
+void MTP3asp__PT_PROVIDER::Handle_Fd_Event(int fd,
+  boolean is_readable, boolean is_writable, boolean is_error)
+{
+  if (MTPServiceType == TargetM3UA )
+  {
+#ifdef TARGET_TEST
+    //In case of target Abstract Socket handles the received message
+    Handle_Socket_Event(fd, is_readable, is_writable, is_error);
+#endif
+  }
+#ifndef TARGET_TEST
+  else
+  {
+    int result;
+
+    result = MPH_ProcessConnection(myConnection);
+
+    if (result <= 0)
+    {
+      MPH_CloseConnection(myConnection);
+      if (result == 0) log("Connection closed by peer.");
+      else log("Error in incoming message.");
+    }
+  }
+#endif
+}
+
+void MTP3asp__PT_PROVIDER::Handle_Timeout(double time_since_last_call)
+{
+#ifdef TARGET_TEST
+  Handle_Timeout_Event(time_since_last_call);
+#endif
+}
+//------------
+
+//Outgoing send
+void MTP3asp__PT_PROVIDER::outgoing_send(const ASP__MTP3__TRANSFERreq& send_par)
+{
+  MTP3__Field__sio sio_field = send_par.sio();
+#ifndef TARGET_TEST
+  int si=bit2int(sio_field.si());
+#endif
+
+  OCTETSTRING sio_oct = bit2oct(sio_field.ni()+sio_field.prio()+sio_field.si());
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+
+  //Message sending by testing on Target
+  if (MTPServiceType == TargetM3UA)
+  {
+#ifdef TARGET_TEST
+    OCTETSTRING tcpData = int2oct(1,1); //Message type
+    tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length
+    tcpData = tcpData + sio_oct;
+    tcpData = tcpData + int2oct(send_par.opc(),4);
+    tcpData = tcpData + int2oct(send_par.dpc(),4);
+    tcpData = tcpData + int2oct(send_par.sls(),1);
+    tcpData = tcpData + send_par.data();
+    send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+    TTCN_Logger::log_event_str("Transfer Req message sent: ");
+    tcpData.log();
+    TTCN_Logger::end_event();
+#endif
+    return;
+  }
+  //Message sending by testing on Target
+  if (MTPServiceType == TargetSTC)
+  {
+#ifdef TARGET_TEST
+    OCTETSTRING tcpData = int2oct(1,1); //Message type
+    tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length
+    tcpData = tcpData + int2oct(0,1);
+    tcpData = tcpData + int2oct(0,4);
+    tcpData = tcpData + int2oct(0,4);
+    tcpData = tcpData + int2oct(0,1);
+    tcpData = tcpData + send_par.data();
+    send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+    TTCN_Logger::log_event_str("Transfer Req (STC) message sent: ");
+    tcpData.log();
+    TTCN_Logger::end_event();
+#endif
+    return;
+  }
+#ifndef TARGET_TEST
+  if (dynamicConnection &&(!connectionUp))
+  {
+    warn("Connection was not activated via function f_M3UA_SEA_connect.");
+    return;
+  }
+
+  unsigned int offset;
+  int MSU_length = send_par.data().lengthof();
+  int M3UA_par_length;
+  int length;
+  int labellen; // sio+routinglabel length
+
+  switch ( MTPServiceType)
+  {
+    case STC:
+      length = MSU_length;
+      memcpy(buffer, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3iup:
+      if(si==4)
+      {
+        offset = 0;
+        labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte)
+        length = MSU_length+labellen;
+        buffer[0] = *((const unsigned char*)sio_oct);
+        SetPointCodesIUP(send_par.sls(), send_par.opc(), send_par.dpc(),
+           buffer + offset + 1);
+        memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      }
+      else
+      {
+        offset = 0;
+        labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+        length = MSU_length + labellen; //SIF+SIO ;
+        //append MTP3 MSU
+        buffer[offset] = *((const unsigned char*)sio_oct);
+        SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+           buffer + offset + 1);
+        memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      }
+      break;
+    case MTP3itu:
+      offset = 0;
+      labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3ansi:
+      offset = 0;
+      labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3ttc:
+      offset = 0;
+      //if (mtp3_ni==0){ labellen=5;}
+      //else {
+      labellen=6;
+      //} //TTC: sio(1byte) +routing label(6byte) see  ...
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3bttc:
+      offset = 0;
+      buffer[offset] = *((const unsigned char*)bttc_oct);
+      offset += 1;
+      labellen=7; //routing label(7byte)
+      length = 1 + MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3mpt:
+      offset = 0;
+      if (mtp3_ni==2)
+      { labellen=8;} //MPT national: sio(1byte) +routing label(7byte)
+      else
+      { labellen=5;} //MPT international: sio(1byte) +routing label(4byte)
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen,
+             send_par.data(), send_par.data().lengthof());
+      break;
+    case M3UA :
+      TTCN_Logger::begin_event(TTCN_DEBUG);
+      TTCN_Logger::log_event("MTP3 test port debug: Message to be encoded is: {");
+      send_par.data().log();
+      TTCN_Logger::log_event(" ");
+      if( M3UAState != AssocActive )
+      {
+        TTCN_Logger::log_event(" M3UAState is not ready to send data. Its state code: %d",AssocActive);
+        TTCN_Logger::log_event("}");
+        TTCN_Logger::end_event();
+        return;
+      }
+      //calculating lengths
+      M3UA_par_length = MSU_length + 16; // ProtocolData parameter
+                 // header length=16 <== see f
+      TTCN_Logger::log_event(", Adjusted M3UA_par_length to %d to support 16 octets M3UA param header",M3UA_par_length);
+      length = 8 + M3UA_par_length; //msg length = header+par
+      TTCN_Logger::log_event(", M3UA MSU_length is %d ==> there should be %d padding octets", MSU_length, 4-(MSU_length%4));
+      if (MSU_length%4) { //should be padded to be multiple of 4 octets
+        length += 4 - (MSU_length%4); //padding shall be counted in msg
+              //length, but not in par_length
+      }
+      TTCN_Logger::log_event(", Set msg length (which includes 8 octets M3UA hdr) to %d ",length);
+
+      //filling the first part of the buffer
+      //common msg hdr ======================================
+      buffer[0] = M3UA_version;
+      buffer[1] = 0x00; //spare
+      buffer[2] = M3UA_MSG_CLS_TRNSFM; // msg class
+      buffer[3] = M3UA_MSG_TYP_TRSNFM_DATA; // msg type
+      encode_32b_int(buffer+4, length); //msg length, 4 bytes
+      //ProtocolData parameter header=========================
+      //tag
+      buffer[M3UA_MSG_OFFS] = PAR_PREFIX_M3UA; //par. tag 1st octet
+      buffer[M3UA_MSG_OFFS+1] = PAR_PROT_DATA; // par tag 2nd octet
+      //length, NOTE: should not contain the padding bytes!
+      encode_16b_int(buffer+M3UA_MSG_OFFS+2,M3UA_par_length);
+      //OPC,DPC
+      encode_32b_int(buffer+M3UA_MSG_OFFS+4,send_par.opc());
+      encode_32b_int(buffer+M3UA_MSG_OFFS+8,send_par.dpc());
+      //SI, NI, MP, SLS
+      buffer[M3UA_MSG_OFFS+12] = bit2int(sio_field.si()); // SI LSb aligned
+      buffer[M3UA_MSG_OFFS+13] = bit2int(sio_field.ni()); // NI LSb aligned
+      buffer[M3UA_MSG_OFFS+14] = bit2int(sio_field.prio()); //MP LSb
+                //aligned
+      buffer[M3UA_MSG_OFFS+15] = 0xFF & send_par.sls(); //SLS
+      // finally the MTP3 MSU itself....
+      offset =  M3UA_MSG_OFFS + 16;
+      TTCN_Logger::log_event(", buffer offset is now set to %d", offset);
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      //append MTP3 MSU
+      memcpy(buffer + offset, send_par.data(), send_par.data().lengthof());
+
+      //padding
+      for (int ii = 0; ii< (MSU_length%4); ++ii) buffer[offset+MSU_length+ii]= 0x00;
+      break;
+    default:
+      error("Invalid MTP3ServiceType setting!");
+  }
+  if (TTCN_Logger::log_this_event(TTCN_DEBUG))
+  {
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("The encoded buffer is: {");
+    OCTETSTRING(length, buffer).log();
+    TTCN_Logger::log_event("}");
+    TTCN_Logger::end_event();
+  }
+  send_msg(buffer, length);
+#endif
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::log(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::warn(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_WARNING);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::debuglog(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::error(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_ERROR);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+  TTCN_error("Fatal error in MTP3 Test Port %s.", get_name());
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::close_log_event()
+{
+  TTCN_Logger::log_event("}");
+  TTCN_Logger::end_event();
+}
+//------------
+
+
+#ifndef TARGET_TEST
+// --------------------------------------------
+// Functions and definitions for test with SEA
+// --------------------------------------------
+
+// Functions of MPH toolkit
+// ---------------------------
+void connectCallback(CONNECTION* con, int channel, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel succeeded "
+        "(channel number is %u)", channel);
+  ((MTP3asp__PT_PROVIDER *)clientData)->set_channel(channel);
+  if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection)
+    ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 1;
+}
+
+void messageCallback(CONNECTION* con, int channel, int length,
+                     unsigned char *msg, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Incoming message from channel: %d",channel);
+  ((MTP3asp__PT_PROVIDER *)clientData)->doInterpret(msg,length,channel,con);
+}
+
+void closeCallback(CONNECTION* con, int channel, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Closed channel: %d", channel);
+}
+
+void errorCallback(CONNECTION* con, char *name, char *errorMessage,
+                   void *clientData)
+{
+  if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection)
+  {
+    ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel %s failed: %s", name, errorMessage);
+    ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 2;
+  }
+  else
+    ((MTP3asp__PT_PROVIDER *)clientData)->error("Opening channel %s failed: %s",
+        name, errorMessage);
+}
+//------------
+
+//MTP3_open_channel
+void MTP3asp__PT_PROVIDER::MTP3_open_channel(boolean http)
+{
+  int result;
+  int Mphport;
+  char *perrorString;
+  if( Loop == MTP3_ON )
+  {
+    MTP_fd=-1;
+    myConnection = NULL;
+    log("MTP3_open_channel finished for LOOP");
+    return;
+  }
+
+  if(http)
+  {
+    Mphport = MPH_GetMphPort(hostname,httpport,&perrorString);
+  }
+  else
+  {
+    Mphport = httpport;
+  }
+    
+  if (Mphport == -1)
+    error("GetMphPort failed: %s", *perrorString);
+
+  result = MPH_StringToIid(iid_string, &iid);
+  if (result == -1)
+    error("Converting %s to MPH_IID failed.", iid_string);
+
+  myConnection = MPH_OpenConnection(hostname, Mphport);
+  if (myConnection == NULL)
+    error("Opening connection to %s:%d failed.", hostname, Mphport);
+
+  MPH_OpenChannel(myConnection,
+                  entityname,
+                  &iid,
+                  connectCallback,
+                  messageCallback,
+                  closeCallback,
+                  errorCallback,
+                  this);
+
+  MTP_fd = MPH_GetConnectionFd(myConnection);
+  if (MTP_fd != -1)
+    Handler_Add_Fd_Read(MTP_fd);
+  else
+    error("Incorrect file descriptor: %d.", MTP_fd);
+}
+//------------
+
+// MTP3_close_connection
+void MTP3asp__PT_PROVIDER::MTP3_close_connection()
+{
+  MPH_CloseConnection(myConnection);
+  Handler_Remove_Fd_Read(MTP_fd);
+  close( MTP_fd );
+  //Uninstall_Handler(); // Unnecessary if only socket MTP_fd is in use
+}
+//------------
+
+// wait_for_open
+boolean MTP3asp__PT_PROVIDER::wait_for_open()
+{
+  conn_state = 0;
+  while(conn_state==0)
+  {
+    pollfd pollFd = { MTP_fd, POLLIN, 0 };
+    int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+    if (nEvents == 0) {
+      log("MPH channel opening time out");
+      return FALSE;
+    }
+    if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) {
+      log("MPH channel opening error (%d)", (nEvents < 0) ? errno : 0);
+      return FALSE;
+    }
+    Handle_Fd_Event(MTP_fd, TRUE, FALSE, FALSE);
+  }
+  if(conn_state == 1) //connectCallback received
+  {
+    conn_state = 0;
+    return TRUE;
+  }
+  else //errorCallback received
+  {
+    conn_state = 0;
+    return FALSE;
+  }
+}
+//------------
+
+//send msg
+void MTP3asp__PT_PROVIDER::send_msg(unsigned char *outbuff, int length)
+{
+  OCTETSTRING buff(length,outbuff);
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3/M3UA Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("outgoing buffer= ");
+  buff.log();
+  TTCN_Logger::log_event("}");
+  TTCN_Logger::end_event();
+  if (Loop == MTP3_ON)
+  {
+    log("Message looped back");
+    doInterpret(outbuff, length, channel, myConnection);
+  } else
+  {
+    MPH_SendMessage(myConnection,channel,length,outbuff);
+    log("Message sent on channel %d", channel);
+  }
+}
+//------------
+
+//Check TestPortVariables
+void  MTP3asp__PT_PROVIDER::Check_TestPort_Variables()
+{
+  if(!dynamicConnection)
+  {
+    if (httpport==-1) error("Parameter HttpPort is not set.");
+    if (hostname==NULL) error("Parameter Hostname is not set.");
+    if (entityname==NULL) error("Parameter EntityName is not set.");
+  }
+  if (Filter==-1) error("Parameter Filter is not set.");
+  if (Loop==-1) error("Parameter Loop is not set.");
+  if (Sut_Pc==-1) error("Parameter SUT_Pc is not set.");
+  if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set.");
+  if (!Ni_is_set) error("Parameter NI is not set.");
+}
+//------------
+
+// -------------------------------------------------
+// STC Functions and definitions for test with SEA
+// -------------------------------------------------
+void  MTP3asp__PT_PROVIDER::Check_TestPort_Variables_STC()
+{
+  if(!dynamicConnection)
+  {
+    if (httpport==-1) error("Parameter HttpPort is not set.");
+    if (hostname==NULL) error("Parameter Hostname is not set.");
+    if (entityname==NULL) error("Parameter EntityName is not set.");
+  }
+}
+//------------
+
+//STC user map
+void MTP3asp__PT_PROVIDER::STC_user_map(const char *system_port)
+{
+  debuglog("Function STC_user_map started");
+  Check_TestPort_Variables_STC();
+  if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  {
+    MTP3_open_channel(TRUE);
+    STC_user_connect();
+  }
+}
+//------------
+
+//STC user connect
+void MTP3asp__PT_PROVIDER::STC_user_connect()
+{
+}
+
+//STC user unmap
+void MTP3asp__PT_PROVIDER::STC_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+//------------
+
+//STC interpreter
+void MTP3asp__PT_PROVIDER::STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  {
+    log("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  {
+    log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  {
+    log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  ASP__MTP3__TRANSFERind recv_msg;
+  MTP3__Field__sio recv_sio;
+  recv_sio.ni()= int2bit(0,2);
+  recv_sio.prio()= int2bit(0,2);
+  recv_sio.si()= int2bit(0,4);
+  recv_msg.sio() = recv_sio;
+  recv_msg.sls() = 0;
+  recv_msg.opc() = 0;
+  recv_msg.dpc() = 0;
+  recv_msg.data() = OCTETSTRING(length, &inbuffer[0]);
+  incoming_message( recv_msg );
+}
+
+// -------------------------------------------------
+// MTP3 Functions and definitions for test with SEA
+// -------------------------------------------------
+
+// SLTM messages for MTP3
+// -----------------------
+unsigned char ttcn_in_sltm[] = {
+  'T','T','C','N','-','3',' ','E','x','e','c','u','t','o','r'};
+
+const int sizeof_ttcn_in_sltm=15;
+
+// ITU:
+unsigned char sltm_msg_itu[] =
+{
+  0x1,  //SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!!
+  0x0,  0x0, 0x0,  0x0, //4 bytes for label (dpc, opc,sls)
+  0x11, //Heading code ITU, see Q.707/5.4
+  0xF0, //spare+Length of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_itu=7+15;
+
+// ANSI:
+unsigned char sltm_msg_ansi[]=
+{
+  0xB1, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label
+  0x11,  // Heading Code ANSI T1.111.7-2001
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_ansi=10+15;
+
+// TTC:
+unsigned char sltm_msg_ttc_national[]=
+{
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!!
+  0x11,  // Heading Code
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_ttc_national=9+15;
+
+// BTTC:
+unsigned char sltm_msg_bttc_national[]=
+{
+  0x0, // extra octet, ignored
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!!
+  0x23,  // Heading Code
+  'T', 'T'
+};
+const int sizeof_sltm_msg_bttc_national=1+8+2;
+
+// MPT:
+unsigned char sltm_msg_mpt_national[]=
+{
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label
+  0x11,  // Heading Code
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_mpt_national=10+15;
+//------------
+
+
+// coder functions for MTP3
+// -------------------------
+// unsigned int<-> unsigned char array
+// Integer encode/decode functions that will encode/decode from/to
+// Result: Least Significant Byte first (in lowest address) = LSB = Little Endian
+void MTP3asp__PT_PROVIDER::encode_56bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+  from >>= 8;
+  to[5] = from & 0xFF;
+  from >>= 8;
+  to[6] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_56bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32)|
+         ((ull) from[5] << 40)|
+         ((ull) from[6] << 48);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_48bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+  from >>= 8;
+  to[5] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_48bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32)|
+         ((ull) from[5] << 40);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_40bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_40bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_32bLSB_int(unsigned char *to, unsigned int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_32bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8) | (from[2] << 16) | (from[3] << 24);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_24bLSB_int(unsigned char *to, int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_24bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8) | (from[2] << 16);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_16bLSB_int(unsigned char *to, int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_16bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8);
+}
+//------------
+
+//MTP3 user map
+void MTP3asp__PT_PROVIDER::MTP3_user_map(const char *system_port)
+{
+  debuglog("Function MTP3_user_map started");
+  Check_TestPort_Variables();
+   if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  { 
+    MTP3_open_channel(TRUE);
+    MTP3_user_connect();
+  }
+  debuglog("Function MTP3_user_map finished");
+}
+//------------
+
+//MTP3 user connect
+void MTP3asp__PT_PROVIDER::MTP3_user_connect()
+{
+  // Sending out an SLTM message:
+  unsigned char * sltm_msg;
+  unsigned int offset = 0;
+  int sizeof_msg;
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+    case MTP3iup:
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      break;
+    case MTP3ansi:
+      sltm_msg=sltm_msg_ansi;
+      sizeof_msg=sizeof_sltm_ansi;
+      break;
+    case MTP3ttc:
+  /*    if (mtp3_ni == 0){
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      }
+      else {
+  */
+      sltm_msg=sltm_msg_ttc_national;
+      sizeof_msg=sizeof_sltm_msg_ttc_national;
+  //    }
+      break;
+    case MTP3bttc:
+      sltm_msg=sltm_msg_bttc_national;
+      sizeof_msg=sizeof_sltm_msg_bttc_national;
+      offset = 1;
+      break;
+    case MTP3mpt:
+      if (mtp3_ni == 2)
+      {
+        sltm_msg = sltm_msg_mpt_national;
+        sizeof_msg = sizeof_sltm_msg_mpt_national;
+      } else
+      {
+        sltm_msg = sltm_msg_itu;
+        sizeof_msg = sizeof_sltm_msg_itu;
+      }
+      break;
+    default:
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      break;
+  }
+  stored_bttc_octet = 0;
+  unsigned char sio = ((unsigned char) mtp3_ni) << 6;
+
+  if (Ni_is_set)
+  { sltm_msg[0+offset] = sio | 0x1; }
+  else
+  { sltm_msg[0+offset] = 0x1; };//SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!!
+
+  SetPointCodes(0, Tester_Pc, Sut_Pc, sltm_msg + 1 +offset); // common for ITU, ANSI and TTC
+  log("MTP3/SLTM message sending...");
+  send_msg(sltm_msg, sizeof_msg);
+}
+//MTP3 user unmap
+void MTP3asp__PT_PROVIDER::MTP3_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+
+//MTP3 interpreter
+void MTP3asp__PT_PROVIDER::MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  {
+    log("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  {
+    log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  {
+    log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  unsigned int offset = 0;
+  if ( MTPServiceType==MTP3bttc )
+  {
+    stored_bttc_octet = inbuffer[0];
+    offset = 1;
+  }
+  int labellen; // sio+routinglabel length
+  int rec_ni = (inbuffer[offset]) >> 6;  //network indicator
+  if (rec_ni != mtp3_ni)
+    error("Received NI is different from sent NI.");
+
+  unsigned char sio = inbuffer[offset];
+  unsigned int si = sio&0x0F;
+
+  if ( MTPServiceType==MTP3itu )
+  { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+  }
+  else if ( MTPServiceType==MTP3iup )
+  { 
+    if(si==4)
+      labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte)
+    else
+      labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+  }
+  else if (MTPServiceType==MTP3ttc)
+  { labellen=6; //new (2004-03-02): 6= sio(1byte)+ routing label(5bytes)
+  }
+  else if (MTPServiceType==MTP3mpt)
+  {
+     if ( mtp3_ni == 2)
+       {labellen=8;} //MPT national: sio(1byte) +routing label(7byte)
+     else
+       {labellen=5;} //MPT international: sio(1byte) +routing label(4byte)
+  }
+  else if (MTPServiceType==MTP3bttc)
+  { labellen=7; //7= sio(1byte)+ routing label(6bytes)
+  }
+  else
+  { log("incorrect MTPServiceType - programming error-> packet dropped");
+    return;
+  }
+
+  // checking SIO field (first incoming byte) - management or test message
+  switch (si)
+  {
+    case 0: processing_MTP3_management_msg(inbuffer+offset,length-offset);
+      return;
+    case 1:                                                          //MTP3itu
+    case 2: processing_MTP3_test_msg(inbuffer+offset,length-offset); //MTP3ansi
+      return;
+    default:
+      break;
+  }
+
+  // filling up TTCN structure
+  if ((Loop==MTP3_ON) || (!Filter) || (Filter&&Check_PcMatch(Sut_Pc,Tester_Pc,&inbuffer[offset+1])))
+  {
+    ASP__MTP3__TRANSFERind recv_msg;
+    MTP3__Field__sio recv_sio;
+    BITSTRING sio_bit = oct2bit(OCTETSTRING(1,inbuffer+offset));
+    recv_sio.ni()= substr(sio_bit,0,2);
+    recv_sio.prio()= substr(sio_bit,2,2);
+    recv_sio.si()= substr(sio_bit,4,4);
+    recv_msg.sio() = recv_sio;
+    unsigned int sls,opc,dpc;
+    if ( (MTPServiceType==MTP3iup) && (si==4) )
+      GetPointCodesIUP(sls,opc,dpc,&inbuffer[1]);
+    else
+      GetPointCodes(sls,opc,dpc,&inbuffer[offset+1]);
+    recv_msg.sls() = sls;
+    recv_msg.opc() = opc;
+    recv_msg.dpc() = dpc;
+    int len;
+    len= length-labellen-offset; //len= length-labellen;
+    recv_msg.data() = OCTETSTRING(len, &inbuffer[offset+labellen]);
+    incoming_message( recv_msg );
+  }
+  else
+  { log("The rooting label (OPC, DPC) not matched with the filter setting -> packet dropped.");
+    return;
+  }
+}
+
+void MTP3asp__PT_PROVIDER::processing_MTP3_management_msg(unsigned char* inbuff,int len)
+{
+  int outlen=0;
+  int labellen; // sio+routinglabel length
+  int chm_addlen;  // (Changeback) additional length = Heading Code + SLC+ (changeback codes)
+  int mim_addlen;  // (MIM)          -"-
+  unsigned int offset = 0;
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+
+  if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup)
+  { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    chm_addlen = 2;
+    mim_addlen = 1;
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T.1.111.4
+    chm_addlen = 3;
+    mim_addlen = 2;
+  }
+  else if (MTPServiceType==MTP3ttc)
+  { //if ( mtp3_ni == 0 ) { labellen=5;} //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    //else {
+    labellen=6;
+    //} //sio(1byte)+ routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704.
+  }
+  else if (MTPServiceType==MTP3mpt)
+  { if ( mtp3_ni == 2 ) { labellen=8; }
+    else { labellen=5; }
+    chm_addlen = 2;
+    mim_addlen = 1;
+  }
+  else if (MTPServiceType==MTP3bttc)
+  { labellen=7;//sio(1byte)+routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704
+    offset = 1;
+  }
+  else
+  { log("incorrect MTPServiceType- programming error-> packet dropped");
+    return;
+  }
+
+  if (MTPServiceType==MTP3bttc)
+  {
+    buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front
+    buffer[1]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[2],&inbuff[1],len))
+    { log("incorrect incoming management message -> packet dropped.");
+      return;
+    }
+  }
+  else
+  {
+    buffer[0]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[1],&inbuff[1],len))
+    { log("incorrect incoming management message -> packet dropped.");
+      return;
+    }
+  }
+
+  // Changeover & changeback(CHM) see ITU: Q.704/15.4.1  ANSI: T.1.111.4/15.2-4
+  if (inbuff[labellen]==0x51) //CBD
+  {
+    outlen=labellen+chm_addlen;
+    if (len<outlen)
+    { log("incorrect incoming CHM message -> packet dropped.");
+      return;
+    }
+    else
+    { buffer[offset + labellen]= 0x61; // Heading Code <- CBA
+      memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],len-labellen-1);
+      outlen = len;
+    }
+  }
+  else if (inbuff[labellen]==0x16) //MIM  H0=6=Mgmt inhibit msg, H1=1=LIN
+  {
+    outlen=labellen+mim_addlen;
+    if (len<outlen)
+    { log("incorrect incoming MIM message -> packet dropped.");
+      return;
+    }
+    else
+    {
+      buffer[offset + labellen]= 0x56; // LIN -> LID  ; LID = link inhibit denied
+      memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); //SLC+spare+...
+      outlen = len;
+    }
+  }
+  else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup))
+  {
+    if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+    return;
+  }
+
+/*  else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) //TRM  H0=7, H1=1 : TRA
+  {
+    outlen=labellen+1;
+    if (len<outlen)
+    { log("incorrect incoming TRA message -> packet dropped.");
+      return;
+    }
+    else
+    {
+      outlen = len;
+    }
+  }*/
+  else
+  { log("This management message type is not supported -> packet dropped.");
+    return;
+  }
+
+  // send message
+  log("function processing_MTP3_management_msg sends a msg");
+  send_msg(buffer, outlen+offset);
+}
+
+// processing MTP3 test msg
+// Signalling link test message handling according to Q.707 (ITU) and T1.111.7-2001 (ANSI)
+void MTP3asp__PT_PROVIDER::processing_MTP3_test_msg(unsigned char* inbuff,int len)
+{
+  int outlen=0;
+  int labellen; // sio+routinglabel length
+  int addlen;   //Heading Code+length indicator
+  //unsigned int ni; //network indicator
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+  unsigned int offset = 0;
+  if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup)
+  {
+    labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    addlen = 2; //HC(1 byte)+length ind(1 byte) see Q.707/5.8
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  {
+    labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+    addlen = 2; //HC(1byte) +(length ind+SLC(1byte)) see  T1.111.7-2001/5
+  }
+  else if (MTPServiceType==MTP3ttc)
+  {
+  /*  if (mtp3_ni == 0) {
+        debuglog("processing_MTP3_test_msg/TTC (Japanese) international");
+        labellen=5;  //TTC (Japanese) international
+        addlen=2;
+    } else {
+  */
+        labellen=6; // previously 7
+                    // TTC national [ 56bits=sio(1byte)+routing label ]
+                    // r.label= dpc(2bytes)+opc(2bytes)+sls(4bit)+12bits (?)
+        addlen=2;
+    //}
+  }
+  else if (MTPServiceType==MTP3mpt)
+  {
+    if (mtp3_ni == 2)
+    { labellen=8;  //MPT national
+      addlen=2;
+    }
+    else
+    { labellen=5; // MPT international
+      addlen=2;
+    }
+  }
+  else if (MTPServiceType==MTP3bttc)
+  {
+    labellen=7;
+    addlen=2;
+    offset = 1;
+  }
+  else
+  { log("incorrect MTPServiceType - programming error-> packet dropped");
+    return;
+  }
+
+  if (MTPServiceType==MTP3bttc)
+  {
+    buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front
+    buffer[1]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[2],&inbuff[1],len))
+    {
+      log("incorrect incoming test message -> packet dropped.");
+      return;
+    }
+  }
+  else
+  {
+    buffer[0]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[1],&inbuff[1],len))
+    {
+      log("incorrect incoming test message -> packet dropped.");
+      return;
+    }
+  }
+
+  // Test message handling: SLTM->SLTA, SRT->SRA, SLTA->TRA, others only logged
+  debuglog("\n==>Test message handling: msg type:%x\n",   inbuff[labellen] ); // temporary
+  switch( inbuff[labellen] )
+  {
+    case 0x11: //SLTM
+      log("MTP3/SLTM message received");
+      outlen=labellen+addlen;
+      if (len<outlen )
+      { log("incorrect incoming MTP3/SLTM message -> packet dropped.");
+        return;
+      }
+      else
+      { buffer[offset + labellen]= 0x21; // SLTA
+        memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1));
+        outlen = len;
+      }
+      break;
+    case 0x21: //SLTA
+      if(!strncmp((const char *)(inbuff+labellen+addlen),(const char *)ttcn_in_sltm,sizeof_ttcn_in_sltm))
+      {
+        log("MTP3/SLTA message received for  SLTM sent by Test Port-> TRA message sent");
+        buffer[offset]--;
+        buffer[offset + labellen]= 0x17; // TRA
+        outlen = labellen+1;
+        return;
+//        if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+      }
+      else
+      {
+        log("MTP3/SLTA message received -> packet dropped");
+        return;
+      }
+      break;
+    case 0x23: // TTC (Japanese) SRT (Signalling Routing Test signal)
+      log("MTP3ttc/SRT message received");
+      outlen=labellen+addlen;
+      if (len<outlen )
+      { log("incorrect incoming MTP3ttc/SRT message (length error)-> packet dropped.");
+        return;
+      }
+      else
+      { buffer[offset + labellen]= 0x84; // TTC (Japanese) SRA
+        memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1));
+        outlen = len;
+      }
+      break;
+    case 0x84: // TTC (Japanese) SRA (Signalling Routing test Ack signal)
+      log("MTP3ttc/SRA message received -> packet dropped");
+      return;
+    default:
+      log("This management message type is not supported -> packet dropped ");
+      return;
+  }
+
+  // send message
+  log("function processing_MTP3_test_msg sends a message");
+  send_msg( buffer,outlen+offset);
+}
+
+// Point Code Manipulation (Get/Set/Change)
+// -------------------------------------------------
+void MTP3asp__PT_PROVIDER::GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg)
+{
+  unsigned int label;
+  sls=0; opc=0; dpc=0;
+  unsigned long long int Label;
+
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+      label= decode_32bLSB_int(msg);
+      sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+      opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+      dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+      debuglog("Function GetPointCodes called for service type MTP3itu");
+      break;
+    case MTP3iup:
+      label= decode_32bLSB_int(msg);
+      sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+      opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+      dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+      debuglog("Function GetPointCodes called for service type MTP3iup");
+      break;
+    case MTP3ansi:
+      Label=decode_56bLSB_int(msg);
+      sls  = (Label >> 48) & 0xFF;    //sls  = (Label&0x00FF000000000000)>>48;
+      opc  = (Label >> 24) & 0xFFFFFF;//opc  = (Label&0x0000FFFFFF000000)>>24;
+      dpc  = Label & 0xFFFFFF;        //dpc  = (Label&0x0000000000FFFFFF);
+      debuglog("Function GetPointCodes called for service type MTP3ansi");
+      break;
+    case MTP3ttc:
+    /*
+      if( mtp3_ni == 0)
+      {
+        label= decode_32bLSB_int(msg);
+        sls  = (label>>28)&0xF;     //sls  = (label&0xF0000000)>>28;
+        opc  = (label>>14)&0x3FFF;  //opc  = (label&0x0FFFC000)>>14;
+        dpc  = label&0x3FFF;
+        debuglog("Function GetPointCodes called for service type MTP3ttc/international");
+      } else
+      {*/
+      Label=decode_48bLSB_int(msg);            //0x010203040506
+      sls  = (Label>>32)&0xF;   // sls  = (Label&0x000F00000000)>>32; // only 4 bits!!!
+      opc  = (Label>>16)&0xFFFF;//opc  = (Label&0x0000FFFF0000)>>16;
+      dpc  = Label&0xFFFF;      //dpc  = (Label&0x00000000FFFF);
+      debuglog("Function GetPointCodes called for service type MTP3ttc/national");
+      //}
+      break;
+    case MTP3bttc:
+      Label=decode_48bLSB_int(msg);
+      sls  = (Label>>32)&0xF;   // sls  = (Label&0x000F00000000)>>32; // only 4 bits!!!
+      opc  = (Label>>16)&0xFFFF;//opc  = (Label&0x0000FFFF0000)>>16;
+      dpc  = Label&0xFFFF;      //dpc  = (Label&0x00000000FFFF);
+      debuglog("Function GetPointCodes called for service type MTP3bttc/national");
+      break;
+    case MTP3mpt:
+      if( mtp3_ni == 2)
+      {
+        Label=decode_56bLSB_int(msg);
+        sls  = (Label >> 48) & 0xFF;    //sls  = (Label&0x00FF000000000000)>>48;
+        opc  = (Label >> 24) & 0xFFFFFF;//opc  = (Label&0x0000FFFFFF000000)>>24;
+        dpc  = Label & 0xFFFFFF;        //dpc  = (Label&0x0000000000FFFFFF);
+        debuglog("Function GetPointCodes called for service type MTP3mpt(nat)");
+      }
+      else
+      {
+        label= decode_32bLSB_int(msg);
+        sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+        opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+        dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+        debuglog("Function GetPointCodes called for service type MTP3mpt(int)");
+      }
+      break;
+    default:
+      break;
+  }
+  debuglog("sls:%u opc:%u, dpc:%u",sls,opc,dpc);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg)
+{
+  debuglog("Function GetPointCodesIUP called");
+  cic=0; opc=0; dpc=0;
+  unsigned long long int Label;
+  Label=decode_40bLSB_int(msg);            //0x0102030405
+  cic  = (Label>>28)&0xFFF;  //cic  = (label&0xFFF0000000)>>28;
+  opc  = (Label>>14)&0x3FFF; //opc  = (label&0x000FFFC000)>>14;
+  dpc  = Label&0x3FFF;       //dpc  = (label&0x0000003FFF);
+  debuglog("cic:%u opc:%u, dpc:%u",cic,opc,dpc);
+}
+
+void MTP3asp__PT_PROVIDER::SetPointCodes(unsigned int sls,unsigned int opc,unsigned int dpc, unsigned char* msg)
+{
+  unsigned long long int Sls,Opc,Dpc;
+
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+      encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+      debuglog("Function SetPointCodes called for service type MTP3itu");
+      break;
+    case MTP3iup:
+      encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+      debuglog("Function SetPointCodes called for service type MTP3iup");
+      break;
+    case MTP3ansi:
+      Sls=sls; Opc=opc; Dpc=dpc;
+      encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc));
+      debuglog("Function SetPointCodes called for service type MTP3ansi");
+      break;
+    case MTP3ttc:
+     /* if ( mtp3_ni == 0 ){
+        encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+        debuglog("Function SetPointCodes called for service type MTP3ttc/international");
+      } else {
+     */
+        Sls=sls; Opc=opc; Dpc=dpc;
+        encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3ttc/national");
+      //}
+      break;
+    case MTP3bttc:
+        Sls=sls; Opc=opc; Dpc=dpc;
+        encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3bttc/national");
+      break;
+    case MTP3mpt:
+      if ( mtp3_ni == 2 )
+      { Sls=sls; Opc=opc; Dpc=dpc;
+        encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3mpt(nat)");
+      }
+      else
+      { encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+        debuglog("Function SetPointCodes called for service type MTP3mpt(int)");
+      }
+      break;
+    default:
+      break;
+  }
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::SetPointCodesIUP(unsigned int cic,unsigned int opc,unsigned int dpc, unsigned char* msg)
+{
+  unsigned long long int Cic,Opc,Dpc;
+  Cic=cic; Opc=opc; Dpc=dpc;
+  debuglog("Function SetPointCodesIUP called");
+  encode_40bLSB_int( msg, ((Cic<<28)|(Opc<<14)|Dpc ));
+}
+
+//Changes the Point  codes: dpc<->opc ie. destination <->orig
+// inbuff starts from dpc i.e doesn't contain sio !!!!
+int MTP3asp__PT_PROVIDER::ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len)
+{
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+    case MTP3iup:
+      if (len<5)
+      { warn("MTP3itu:len<5. Too short message!"); return 0; };
+      break;
+    case MTP3ansi:
+      if (len<9 ) return 0;
+      break;
+    case MTP3ttc:
+      //if ( mtp3_ni == 0 && len<5)
+      //{ warn("MTP3ttc:len<5. Too short message!"); return 0; }
+      //else
+      if (len<6)
+      { warn("MTP3ttc:len<6. Too short message!"); return 0; }
+      break;
+    case MTP3bttc:
+      if (len<7)
+      { warn("MTP3bttc:len<7. Too short message!"); return 0; }
+      break;
+    case MTP3mpt:
+      if ( mtp3_ni == 2 && len<8)
+      { warn("MTP3mpt:len<8. Too short message!"); return 0; }
+      else if (len<5)
+      { warn("MTP3mpt:len<5. Too short message!"); return 0; }
+      break;
+    default:
+      warn("Unknown MTPServiceType!!!");
+      break;
+  }
+  unsigned int sls,opc,dpc;
+  GetPointCodes(sls,opc,dpc,inbuff);
+  SetPointCodes(sls,dpc,opc,outbuff);
+  return 1;
+}
+//------------
+
+int  MTP3asp__PT_PROVIDER::Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff)
+{
+  unsigned int temp_opc,temp_dpc,temp_sls;
+
+  GetPointCodes(temp_sls,temp_opc,temp_dpc,buff);
+  if ( (temp_opc == opc) && (temp_dpc == dpc) ) return 1;
+  return 0;
+}
+//------------
+
+
+// -------------------------------------------------
+// M3UA Functions and definitions for test with SEA
+// -------------------------------------------------
+
+// Structures for M3UA
+static unsigned char aspup_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM
+  M3UA_MSG_TYP_ASPSM_ASPUP, //Msg type: ASPUP
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+  //      ,PAR_PREFIX_COMMON, //optional Info string tag, in included, then msg
+  //       PAR_INFO_STR            //msg length should be +20, that is 28=0x1c
+  //       0x00,0x0f, // length: "TTCN-3 Executor"  is 15 chars
+  //       'T', 'T', 'C', 'N',
+  //       '-', '3', ' ', 'E',
+  //       'x', 'e', 'c', 'u',
+  //       't', 'o', 'r', 0x00 //las octet is padding
+};
+const int sizeof_aspup_msg = 8;
+
+static unsigned char aspupack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM
+  M3UA_MSG_TYP_ASPSM_ASPUPAck, //Msg type: ASPUP
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspupack_msg = 8;
+
+static unsigned char aspac_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPAC, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspac_msg = 8;
+
+// ASP Active Acknowledge msg:
+static unsigned char aspac_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPACAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspac_ack_msg = 8;
+
+static unsigned char aspia_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPIAAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspia_ack_msg = 8;
+
+// ASP DOWN Acknowledge msg:
+static unsigned char aspdn_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class
+  M3UA_MSG_TYP_ASPSM_ASPDNAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspdn_ack_msg = 8;
+
+//ASP Destination Available msg:
+static unsigned char dava_1apc_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  //or updated doc 2/1056-FCPW 101 86/P-1
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_SSNM, //Msg class
+  M3UA_MSG_TYP_SSNM_DAVA, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x10,  // length ends, 16 octets
+  //Affected point code
+  PAR_PREFIX_COMMON,
+  PAR_AFFECTED_PC,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // point code placeholder begins
+  0x00, //
+  0x00, //
+  0x00 // point code placeholder ends
+};
+const int sizeof_dava_1apc_msg = 16;
+
+static unsigned char duna_1apc_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_SSNM, //Msg class
+  M3UA_MSG_TYP_SSNM_DUNA, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x10,  // length ends, 16 octets
+  //Affected point code
+  PAR_PREFIX_COMMON,
+  PAR_AFFECTED_PC,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // point code placeholder begins
+  0x00, //
+  0x00, //
+  0x00 // point code placeholder ends
+};
+const int sizeof_duna_1apc_msg = 16;
+
+static unsigned char error_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_MGMT, //Msg class
+  M3UA_MSG_TYP_MGMT_ERR, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x18,  // length ends, 16+8 octets
+  // Error code field:
+  PAR_PREFIX_COMMON,
+  PAR_ERROR_CODE,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // error code placeholder begins (M3UA_MSG_OFFS+4)
+  0x00, //
+  0x00, //
+  0x00, // error code placeholder ends
+  // additional field:
+  0x00, // M3UA_MSG_OFFS+8
+  0x00, // Routing context or Network Appearanance or APC or DI = error_code_id
+  0x00, // par length begins (2 octets)
+  0x08, // length ends, 8 octets
+  0x00, // value placeholder begins M3UA_MSG_OFFS+12
+  0x00, //
+  0x00, //
+  0x00 // value place holder ends
+};
+const int sizeof_error_msg = 24;
+
+void MTP3asp__PT_PROVIDER::M3UA_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::M3UA_user_map(const char *system_port)
+{
+  M3UAState = AssocDown;
+  Check_TestPort_Variables();
+  if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  {
+    MTP3_open_channel(TRUE);
+    M3UA_user_connect();
+  }
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::M3UA_user_connect()
+{
+    M3UAState = AssocEstabl;
+    // Sending out an ASPUP message
+    log("Message ASPUP will be sent");
+    send_msg(aspup_msg, sizeof_aspup_msg);
+    // NOTE: the ASPUPAck will be handled by M3UA_interpreter, which
+    // also will take care of sending ASPAC upon receiving the ASPUPAck
+}
+//------------
+
+// M3UA_interpreter
+void MTP3asp__PT_PROVIDER::M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  { warn("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  { log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  { log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  // version checking
+  if (  inbuffer[M3UA_VER_OFFS]  != M3UA_version )
+  { warn("Incompatible M3UA protocol version in header -> packet dropped");
+    return;
+  }
+
+  //length checking
+  unsigned int indicated_length = decode_32b_int(inbuffer + M3UA_LGT_OFFS );
+  if ( indicated_length  != (unsigned)length)
+    warn("Length in common header (%d) mismatches received  buffer length (%d),"
+         "Assuming that it is because of the omission of final parameter padding"
+         "in indicated length",indicated_length, length);
+
+  // checking MSG class
+  int unprocessed_chars = 0;
+  switch (inbuffer[M3UA_CLS_OFFS])
+  {
+    case M3UA_MSG_CLS_MGMT:
+      unprocessed_chars =  processing_M3UA_MGMT_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_TRNSFM :
+      unprocessed_chars =  processing_M3UA_Transfer_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_SSNM :
+      unprocessed_chars = processing_M3UA_SSNM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_ASPSM :
+      unprocessed_chars = processing_M3UA_ASPSM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_ASPTM :
+      unprocessed_chars = processing_M3UA_ASPTM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_RKM :
+      unprocessed_chars = processing_M3UA_RKM_msg(inbuffer, length);
+      break;
+    default:
+      unprocessed_chars = processing_M3UA_unsupported_msg_class(inbuffer, length);
+      break;
+  }
+  debuglog("%d chars remained unprocessed (might be due to padding)",  unprocessed_chars);
+}
+//------------
+
+//processing M3UA MGMT msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_MGMT_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_MGMT_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: Mgmt, ");
+  switch (inbuffer[M3UA_TYP_OFFS])//msg type
+  {
+    case M3UA_MSG_TYP_MGMT_ERR:
+      TTCN_Logger::log_event("type: ERROR-> ignored");
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+    case M3UA_MSG_TYP_MGMT_NTFY:
+      TTCN_Logger::log_event("type: NOTIFY -> ignored");
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+    default:
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class MGMT -> packet dropped.", inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA SSNM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_SSNM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_SSNM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: SSNM, ");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_SSNM_DAUD:
+      while (offset <= length-8 ) //processing potential params
+      {
+        switch (inbuffer[offset++]) //1st octet of tag
+        {
+        case PAR_PREFIX_COMMON:
+          TTCN_Logger::log_event (" DAUD: COMMON parameter ");
+          switch (inbuffer[offset++]) //2nd octet of COMMON tag
+          {
+            case PAR_ROUTING_CTX:
+              TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            case PAR_INFO_STR:
+              TTCN_Logger::log_event ("Info String (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            case PAR_AFFECTED_PC:
+              TTCN_Logger::log_event ("Affected Point Code  -> will send DUNA/DAVA, ");
+              TTCN_Logger::log_event("will ignore remainder parameters after APC}");
+              TTCN_Logger::end_event();
+              Send_DAVA_DUNA_to_APCinDAUD(Tester_Pc, inbuffer, offset);
+              return length-offset;
+            default:
+              TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x-> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]);
+              send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]);
+              skip_par_after_tag(inbuffer, offset);
+              break;
+          }
+          break;
+        case PAR_PREFIX_M3UA:
+          TTCN_Logger::log_event ("DAUD: M3UA parameter: ");
+          switch (inbuffer[offset++]) //2nd octet of M3UA tag
+          {
+            case PAR_NETW_APP:
+              TTCN_Logger::log_event ("Network Appearance (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            default:
+              TTCN_Logger::log_event ("invalid M3UA  param tag:0x%02x%02x-> skipped",
+              PAR_PREFIX_M3UA, inbuffer[offset-1]);
+              send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]);
+              skip_par_after_tag(inbuffer, offset);
+          }
+          break;
+        default: //1st octet of tag
+          TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]);
+          close_log_event();
+          return length -offset;
+        break;
+        }
+      }
+      break;
+    case M3UA_MSG_TYP_SSNM_DAVA: // Destination Available // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DAVA -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DUNA: // Destination Unavailable // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DUNA -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_SCON: // Signalling Congestion  // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_SCON -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DUPU: //Destinationn User Part Unavailable // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DUPU -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DRST: //Destination Restricted   // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DRST -> ignored");
+      close_log_event();
+      break;
+    default: //msg type
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("Unsupported M3UA msg type -> packet dropped.");
+      close_log_event();
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA ASPSM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_ASPSM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_ASPSM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: ASPSM, ");
+
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_ASPSM_ASPUP:
+      TTCN_Logger::log_event("type: ASPSM_ASPUP -> ASPUPAck will be sent");
+      close_log_event();
+      send_msg(aspupack_msg, sizeof_aspupack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPDN:
+      TTCN_Logger::log_event("type: ASPSM_ASPDN -> ASPDNAck will be sent");
+      close_log_event();
+      send_msg(aspdn_ack_msg, sizeof_aspdn_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPSM_BEAT:
+      TTCN_Logger::log_event("type: ASPSM_BEAT -> ASPSM_BEATAck will be sent");
+      close_log_event();
+      //Sending back the packet as acknowledge:
+      inbuffer[M3UA_TYP_OFFS]= M3UA_MSG_TYP_ASPSM_BEATAck;
+      send_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPUPAck:
+      TTCN_Logger::log_event("type: ASPSM_ASPUPAck -> ASPAC will be sent");
+      M3UAState = AssocInac;
+      TTCN_Logger::log_event(" M3UAState's been changed to AssocInac");
+      close_log_event();
+      send_msg(aspac_msg, sizeof_aspac_msg );
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPDNAck:
+      M3UAState = AssocDown;
+      TTCN_Logger::log_event(" M3UAState's been changed to AssocDown");
+      TTCN_Logger::log_event("type: ASPSM_ASPDNAck ->  nothing will be sent");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_ASPSM_BEATAck:
+      TTCN_Logger::log_event("type: ASPSM_BEATAck ->  nothing will be sent");
+      close_log_event();
+      break;
+    default:
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA ASPTM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_ASPTM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_ASPTM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: ASPTM, ");
+
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_ASPTM_ASPAC: //ASP Active
+      M3UAState = AssocActive;
+      TTCN_Logger::log_event("type: ASPTM_ASPAC -> ASPACAck will be sent");
+      close_log_event();
+      send_msg(aspac_ack_msg, sizeof_aspac_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPIA:  //ASP InActive
+      TTCN_Logger::log_event("type: ASPTM_ASPIA -> ASPIAAck will be sent");
+      close_log_event();
+      send_msg(aspia_ack_msg, sizeof_aspia_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPACAck:
+      M3UAState = AssocActive;
+      TTCN_Logger::log_event("type: ASPTM_ASPACAck -> nothing will be sent");
+      TTCN_Logger::log_event("M3UAState's been changed to AssocActive.");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPIAAck:
+      TTCN_Logger::log_event("type: ASPTM_ASPIAAck -> nothing will be sent");
+      close_log_event();
+      break;
+    default:
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA RKM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_RKM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_RKM_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  warn("Unsupported M3UA msg class M3UA_RKM -> packet dropped.");
+  return length - offset;
+}
+//------------
+
+//processing M3UA unsupported msg class
+int MTP3asp__PT_PROVIDER::processing_M3UA_unsupported_msg_class(unsigned char* inbuffer,int length)
+{
+  warn("Unsupported M3UA msg class -> packet dropped.");
+  send_M3UA_error_msg( PAR_ERRC_UNSMC, inbuffer[M3UA_CLS_OFFS] );
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  return length - offset;
+}
+//------------
+
+// processing_M3UA_Transfer_msg  -  called if the msg class is "Transfer" i.e M3UA_MSG_CLS_TRNSFM:
+int MTP3asp__PT_PROVIDER::processing_M3UA_Transfer_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_M3UA_Transfer_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  unsigned int recv_opc, recv_dpc,recv_si, recv_ni, recv_mp,recv_sls =0;
+  int param_length = 0;
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: DataTrnsf, ");
+
+  switch (inbuffer[M3UA_TYP_OFFS]) //msg type
+  {
+    case M3UA_MSG_TYP_TRSNFM_DATA:
+      TTCN_Logger::log_event("msg type DATA, ");
+      while (offset <= length-8) //processing potential params
+      {
+        switch (inbuffer[offset++]) //1st octet of tag. Offset already incremented after the 'case' !
+        {
+          case PAR_PREFIX_COMMON:
+            TTCN_Logger::log_event (" DATA: COMMON parameter, ");
+            switch (inbuffer[offset++]) //2nd octet of tag
+            {
+              case PAR_ROUTING_CTX:
+                TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), ");
+                //  Send back an error msg
+                skip_par_after_tag(inbuffer, offset);
+                break;
+              case PAR_CORREL_ID:
+                TTCN_Logger::log_event ("Correlation ID (unsupported par) -> skipped), ");
+                skip_par_after_tag(inbuffer, offset);
+                break;
+              default:
+                TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x -> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]);
+                skip_par_after_tag(inbuffer, offset);
+                break;
+            }
+          case PAR_PREFIX_M3UA:
+            TTCN_Logger::log_event ("DATA: M3UA parameter: ");
+            switch (inbuffer[offset++]) //2nd octet of M3UA tag
+            {
+              case PAR_PROT_DATA:
+                //---------------------------------------------
+                TTCN_Logger::log_event ("Protocol Data");
+                // retrieving length
+                param_length = decode_16b_int(inbuffer+offset); offset+=2;
+                TTCN_Logger::log_event(", DATA: Length of Protocol Data parameter is %d",param_length);
+                //  retrieving M3UA protocol data paremeter opc, dpc, si, ni, mp,
+                //  sls
+                recv_opc = decode_32b_int(inbuffer+offset); offset +=4;
+                recv_dpc = decode_32b_int(inbuffer+offset); offset +=4;
+                recv_si = (unsigned int)(inbuffer[offset++]);
+                recv_ni = (unsigned int)(inbuffer[offset++]);
+                recv_mp = (unsigned int)(inbuffer[offset++]);
+                recv_sls = (unsigned int)(inbuffer[offset++]);
+                TTCN_Logger::log_event(", DATA: decoded Protocol Data parameter:");
+                // filling up TTCN structure
+                if ((Loop==MTP3_ON) ||
+                    (!Filter) ||
+                    (Filter &&
+                     (recv_opc == (unsigned)Sut_Pc) && (recv_dpc == (unsigned)Tester_Pc) &&
+                     (recv_ni == (unsigned)mtp3_ni)
+                   ))
+                {
+                  ASP__MTP3__TRANSFERind recv_msg;
+                  MTP3__Field__sio recv_sio;
+                  recv_sio.ni()= int2bit(recv_ni,2);
+                  recv_sio.prio()= int2bit(recv_mp,2);
+                  recv_sio.si()= int2bit(recv_si,4);
+                  recv_msg.sio() = recv_sio;
+                  recv_msg.sls() = recv_sls;
+                  recv_msg.opc()= recv_opc;
+                  recv_msg.dpc() = recv_dpc;;
+                  recv_msg.data() = OCTETSTRING(param_length-16, // 16 octet paramheader + 5 routing label
+                  &inbuffer[offset]);
+                  recv_msg.log();
+                  close_log_event();
+                  incoming_message ( recv_msg );
+                  offset += param_length-16;
+                  return  length - offset;
+                }
+                else
+                {
+                  close_log_event();
+                  log("Either the received M3UA(OPC, DPC, SI) fields, or the embedded MTP3 rooting label (OPC, DPC) not matched with the filter setting -> packet dropped.");
+                  return  length - offset;
+                }
+                break;
+              default:
+                TTCN_Logger::log_event ("invalid M3UA  param tag:0x%02x%02x-> skipped", PAR_PREFIX_M3UA, inbuffer[offset-1]);
+                skip_par_after_tag(inbuffer, offset);
+            }
+            break;
+          default:
+            TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]);
+            close_log_event();
+            return length -offset;
+            break;
+        }
+      }// Checking parameter tag (offset <length-8)
+      break;
+    default:
+      TTCN_Logger::log_event("Invalid M3UA msg class TransferMessage msg type %d -> packet dropped",
+                             (unsigned int)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+
+  return length -offset;
+}
+
+// Set M3UA SingleAPC -  Stores field Single Affected Point Code
+void MTP3asp__PT_PROVIDER::Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par)
+{
+  //setting par type to APC
+  apc_par[0] = PAR_PREFIX_COMMON;
+  apc_par[1] = PAR_AFFECTED_PC;
+  //setting the length to 4+4 = 8
+  apc_par[2] = 0x00;
+  apc_par[3] = 0x08;
+  //setting the mask
+  apc_par[4] = 0x00;
+  //setting the pc
+  encode_24b_int(apc_par+5,pc);
+}
+
+// Send DAVA DUNA to APCinDAUD
+void MTP3asp__PT_PROVIDER::Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int & offset)
+{
+  unsigned int length = decode_16b_int(inbuffer+offset);
+  offset +=2;
+  unsigned int current_pc;
+
+  //checking the length
+  if ((length < 8) || (length%4))
+  { warn("Invalid length in APC parameter -> not processed");
+    return;
+  }
+
+  for (unsigned int i = 4  ; i < length; i += 4)
+  {
+    if (inbuffer[offset++] == 0x00)  // mask===>single pc
+    {
+      current_pc = decode_24b_int(inbuffer+offset);
+      offset +=3;
+      if (dava_sep == current_pc) //dava
+      { Set_M3UA_SingleAPC(dava_sep, dava_1apc_msg+M3UA_MSG_OFFS);
+        log("DAVA will be sent for pc=%d", dava_sep);
+        send_msg(dava_1apc_msg, sizeof_dava_1apc_msg);
+      }
+      else //duna
+      { Set_M3UA_SingleAPC(current_pc, duna_1apc_msg+M3UA_MSG_OFFS);
+        log("DUNA will be sent for pc=%d", current_pc);
+        send_msg(duna_1apc_msg, sizeof_duna_1apc_msg);
+      }
+    }
+    else //masked pc
+    { warn("Unsupported  masking (mask=0x%02x) for PC=%d in APC parameter -> ignored",
+      inbuffer[offset-1], current_pc);
+    }
+  }
+  return;
+}
+
+// send M3UA error msg
+// send an eror msg with error_code. Additional parameter matches to the error code:
+void MTP3asp__PT_PROVIDER::send_M3UA_error_msg(unsigned int error_code, unsigned int add_par )
+{
+  encode_16b_int( error_msg+M3UA_MSG_OFFS+4, error_code);
+  encode_16b_int( error_msg+M3UA_MSG_OFFS+8, add_par);
+  send_msg(error_msg, sizeof_error_msg );
+};
+
+// Coder functions for M3UA:  int -> unsigned char array
+//------------------------------------------------------
+// Result:Less significant byte in highest address
+//        Most Significant Byte first (in lowest address) = MSB = Big Endian = Network Byte Order
+void MTP3asp__PT_PROVIDER::encode_32b_int(unsigned char *to, unsigned int from)
+{
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_32b_int(const unsigned char *from)
+{
+  return from[3] | (from[2] << 8) | (from[1] << 16) | (from[0] << 24);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_24b_int(unsigned char *to, unsigned int from)
+{
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_24b_int(const unsigned char *from)
+{
+  return from[2] | (from[1] << 8) | (from[0] << 16);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_16b_int(unsigned char *to, int from)
+{
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_16b_int(const unsigned char *from)
+{
+  return from[1] | (from[0] << 8);
+}
+//------------
+
+//skip par after tag
+void MTP3asp__PT_PROVIDER::skip_par_after_tag(unsigned char* inbuffer, int &offset)
+{
+  offset += decode_16b_int(inbuffer+offset)-2; //the length contains
+                                               //the param hdr. itself
+  if (offset%4) offset += 4-(offset%4); //skipping padding
+}
+//------------
+#endif
+
+
+
+#ifdef TARGET_TEST
+// --------------------------
+// Functions for Target testing
+// --------------------------
+// In case of target this function handles the received message
+void MTP3asp__PT_PROVIDER::message_incoming(const unsigned char* msg, int messageLength, int)
+{
+  OCTETSTRING rcvData = OCTETSTRING(messageLength, msg);
+
+  int msgType = oct2int(substr(rcvData,0,1));
+  switch (msgType)
+  {
+    case 0: //TRANSFERind message received
+      if(Tcp_is_up) //Registration was already performed
+      {
+        ASP__MTP3__TRANSFERind recv_msg;
+        MTP3__Field__sio recv_sio;
+        BITSTRING sio_bit = oct2bit(substr(rcvData,5,1));
+        recv_sio.ni()= substr(sio_bit,0,2);
+        recv_sio.prio()= substr(sio_bit,2,2);
+        recv_sio.si()= substr(sio_bit,4,4);
+        recv_msg.sio() = recv_sio;
+        recv_msg.opc() = oct2int(substr(rcvData,6,4));
+        recv_msg.dpc() = oct2int(substr(rcvData,10,4));
+        recv_msg.sls() = oct2int(substr(rcvData,14,1));
+        recv_msg.data() = substr(rcvData,15,rcvData.lengthof()-15);
+        if (Tcp_is_up == 1) //No unregistration ongoing
+          incoming_message(recv_msg);
+        else                //Unregistration ongoing
+          log("Received ASP_MTP3_TRANSFERind is ignored since unregistration is started.");
+      }
+      else
+        error("Message was received before successful registration in M3UA server.");
+      break;
+
+    case 4: //Status message received
+      {
+        int status = oct2int(substr(rcvData,5,1));
+        if(Tcp_is_up == 2) // Unregistration ongoing
+        {
+          const char * rcvDat = oct2str(rcvData);
+          log("Message \"%s\" received. Status = %i", rcvDat, status);
+          if (status == 2)
+          {
+            log("Unregistration performed.");
+            Tcp_is_up = 0;
+          }
+          else if (status == 3)
+            error("Unsuccessful unregistration.");
+          else if (status == 5) {
+            if(forward_status) {
+              incoming_message(ASP__MTP3__STATUS(NULL_VALUE));
+            }
+            else {
+              warn("Invalid STATUS message received from M3UA server with status code=%d.", status);
+            }
+          }
+        }
+        else if(Tcp_is_up == 1) // Active state
+        {
+          if (status == 5) {
+            if(forward_status) {
+              incoming_message(ASP__MTP3__STATUS(NULL_VALUE));
+            } 
+          }
+          else {
+            warn("Invalid STATUS message received from M3UA server with status code=%d.", status);
+          }
+        }
+        else // Registration ongoing
+        {
+          const char * rcvDat = oct2str(rcvData);
+          log("Message \"%s\" received. Status = %i", rcvDat, status);
+          if (status == 0)
+          {
+            log("Registration performed.");
+            Tcp_is_up = 1;
+          }
+          else {
+            error("Unsuccessful registration.");
+          }
+        }
+      }
+      break;
+    case 5:
+      {
+        if(forward_pause) incoming_message(ASP__MTP3__PAUSE(NULL_VALUE));
+      }
+      break;
+    case 6:
+      {
+        if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+      }
+      break;
+
+
+    default: //Unexpected message received
+      warn("Invalid message received from M3UA server.");
+  }
+}
+
+void  MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables()
+{
+  if (Sut_Pc==-1) error("Parameter SUT_Pc is not set.");
+  if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set.");
+  if (!Ni_is_set) error("Parameter NI is not set.");
+  if (M3UA_version==0) error("Parameter M3UA_version cannot be set to 0 in TargetM3UA mode.");
+ 
+//packet header
+  header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB);
+}
+
+void  MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables_STC()
+{
+  if( destinationname == NULL) error("Parameter DestinationName is not set in TargetSTC mode.");
+  
+  header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB);
+}
+
+void MTP3asp__PT_PROVIDER::Target_user_map(const char *system_port)
+{
+  Tcp_is_up = 0;
+  Check_Target_TestPort_Variables();
+  map_user();
+
+  OCTETSTRING tcpData = int2oct(2,1); //Message type
+  if( destinationname == NULL)
+    tcpData = tcpData + int2oct(char2oct(system_port).lengthof()+15,4); //Length
+  else
+    tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4);
+  tcpData = tcpData + int2oct(mtp3_ni,1);
+  tcpData = tcpData + int2oct(Sut_Pc,4);
+  tcpData = tcpData + int2oct(Tester_Pc,4);
+  tcpData = tcpData + int2oct(M3UA_version,1);
+  if( destinationname == NULL)
+    tcpData = tcpData + char2oct(system_port);
+  else
+    tcpData = tcpData + char2oct(destinationname);
+
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Registration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  int fd = get_socket_fd();
+  pollfd pollFd = { fd, POLLIN, 0 };
+  int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+  if (nEvents == 0)
+    error("No response received for REGISTER message. Exiting after timeout.");
+  if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+    error("No response received for REGISTER message. Exiting after error (%d)",
+      (nEvents < 0) ? errno : 0);
+  Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+}
+
+void MTP3asp__PT_PROVIDER::TargetSTC_user_map(const char *system_port)
+{
+  Tcp_is_up = 0;
+  Check_Target_TestPort_Variables_STC();
+  map_user();
+
+  OCTETSTRING tcpData = int2oct(2,1); //Message type
+  tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4);
+  tcpData = tcpData + int2oct(0,1);
+  tcpData = tcpData + int2oct(0,4);
+  tcpData = tcpData + int2oct(0,4);
+  tcpData = tcpData + int2oct(0,1);
+  tcpData = tcpData + char2oct(destinationname);
+
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Registration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  int fd = get_socket_fd();
+  pollfd pollFd = { fd, POLLIN, 0 };
+  int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+  if (nEvents == 0)
+    error("No response received for REGISTER message. Exiting after timeout.");
+  if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+    error("No response received for REGISTER message. Exiting after error (%d)",
+      (nEvents < 0) ? errno : 0);
+  Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+}
+
+void MTP3asp__PT_PROVIDER::Target_user_unmap(const char *system_port)
+{
+  OCTETSTRING tcpData = int2oct(3,1); //Message type
+  tcpData = tcpData + int2oct(6,4); //Length
+  tcpData = tcpData + int2oct(0,1);
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Unregistration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  Tcp_is_up = 2; //Unregistration ongoing
+
+  while (Tcp_is_up == 2)
+  {
+    int fd = get_socket_fd();
+    pollfd pollFd = { fd, POLLIN, 0 };
+    int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+    if (nEvents == 0)
+      error("No response received for UNREGISTER message. Exiting after timeout.");
+    if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+      error("No response received for UNREGISTER message. Exiting after error (%d)",
+        (nEvents < 0) ? errno : 0);
+    Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+  }
+  unmap_user();
+}
+#endif
+}
diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PT.hh b/MTP3asp_CNL113337/demo/MTP3asp_PT.hh
new file mode 100644
index 0000000..340f24f
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/MTP3asp_PT.hh
@@ -0,0 +1,249 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2009                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PT.hh
+//  Description:  Implementation of port MTP3asp_PT
+//                This test port is written to connect ttcn to SEA 
+//                according to specification ITU-T SS7 MTP3, ANSI, TCC, MPT, IETF, 
+//  Reference:    ITU-T Recommendation Q.704, RFC3332 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2009-04-03
+//  Contact:      http://ttcn.ericsson.se
+
+
+#ifndef MTP3asp_PT_HH
+#define MTP3asp_PT_HH
+
+#include <TTCN3.hh>
+
+#ifdef TARGET_TEST
+#include "Abstract_Socket.hh"
+#endif
+
+#ifndef TARGET_TEST
+#include "mphclib.h"
+#endif
+
+
+#define MAXSIZE 1532 //+32 needed for M3UA
+#define MTP3_ON  1
+#define MTP3_OFF 0
+namespace MTP3asp__Types {
+  class ASP__MTP3__TRANSFERind;
+  class ASP__MTP3__PAUSE;
+  class ASP__MTP3__RESUME;
+  class ASP__MTP3__STATUS;
+  class ASP__MTP3__TRANSFERreq;
+}
+namespace MTP3asp__PortType {
+
+class MTP3asp__PT_PROVIDER : public PORT
+#ifdef TARGET_TEST
+    , public Abstract_Socket
+#endif
+ {
+protected:
+  // pointer to member: user_map/unmap methods
+  typedef void (MTP3asp__PT_PROVIDER::*usermap_t)(const char *system_port);
+  // pointer to member: user_connect methods
+  typedef void (MTP3asp__PT_PROVIDER::*userconnect_t)();
+  // pointer to member: interpreter methods
+#ifndef TARGET_TEST
+  typedef void (MTP3asp__PT_PROVIDER::*interpreter_t)(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+
+  void M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void M3UA_user_map(const char *system_port);
+  void M3UA_user_connect();
+  void M3UA_user_unmap(const char *system_port);
+  void MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void MTP3_user_map(const char *system_port);  // common for MTP3 ITU and MTP3 ANSI
+  void MTP3_user_connect();
+  void MTP3_user_unmap(const char *system_port);// common for MTP3 ITU and MTP3 ANSI
+  void STC_user_connect();
+  void STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void STC_user_map(const char *system_port);
+  void STC_user_unmap(const char *system_port);
+#endif
+#ifdef TARGET_TEST
+  //Map and unmap for target
+  void Target_user_map(const char *system_port);
+  void Target_user_unmap(const char *system_port);
+  void TargetSTC_user_map(const char *system_port);
+#endif
+  
+public:
+  MTP3asp__PT_PROVIDER(const char *par_port_name=NULL);
+  ~MTP3asp__PT_PROVIDER();
+  
+  typedef enum { MTP3itu, MTP3ansi, MTP3ttc, MTP3mpt, M3UA, TargetM3UA, MTP3bttc,MTP3iup, STC, TargetSTC } MTPServiceType_t ;
+
+  MTPServiceType_t MTPServiceType ; // ctor default is MTP3itu
+  void set_parameter(const char *parameter_name, const char *parameter_value);
+  void error(const char *msg, ...);
+  void log(const char *msg, ...);
+#ifndef TARGET_TEST
+  void user_connect();
+
+  void set_channel(int chnl) {channel=chnl;};
+  void MTP3_open_channel(boolean http);
+  void MTP3_close_connection();
+
+  boolean wait_for_open();
+  int conn_state;
+
+  interpreter_t interpreter; // pointer to interpreter members, ctor default is MTP3_ITU_interpreter
+  void doInterpret(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+  { (this->*interpreter)(inbuffer,length,from_channel, con); }
+#endif
+  //parameter handling
+  boolean dynamicConnection, connectionUp;
+  char *hostname;
+  int httpport;
+  char *entityname;
+  int MTP_fd;
+
+protected: 
+  void user_map(const char *system_port);
+  void user_unmap(const char *system_port);
+
+  void debuglog(const char *msg, ...);
+  void warn(const char *msg, ...);
+  void close_log_event();
+
+  usermap_t user_map_p ; //  pointer to user_map members, default is MTP3itu
+  usermap_t user_unmap_p; // pointer to user_unmap members, default is MTP3itu
+  userconnect_t user_connect_p;
+
+  void user_start();
+  void user_stop();
+  
+  void outgoing_send(const MTP3asp__Types::ASP__MTP3__TRANSFERreq& send_par);
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__TRANSFERind& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__PAUSE& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__RESUME& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__STATUS& incoming_par) = 0;
+#ifndef TARGET_TEST
+  void encode_56bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_56bLSB_int(const unsigned char *from);
+  void encode_48bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_48bLSB_int(const unsigned char *from);
+  void encode_40bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_40bLSB_int(const unsigned char *from);
+  void encode_32bLSB_int(unsigned char *to, unsigned int from);
+  unsigned int decode_32bLSB_int(const unsigned char *from);
+  void encode_24bLSB_int(unsigned char *to, int from);
+  unsigned int decode_24bLSB_int(const unsigned char *from);
+  void encode_16bLSB_int(unsigned char *to, int from);
+  unsigned int decode_16bLSB_int(const unsigned char *from);
+  void encode_32b_int(unsigned char *to, unsigned int from);
+  unsigned int decode_32b_int(const unsigned char *from);
+  void encode_24b_int(unsigned char *to, unsigned int from);
+  unsigned int decode_24b_int(const unsigned char *from);
+  void encode_16b_int(unsigned char *to, int from);
+  unsigned int decode_16b_int(const unsigned char *from);
+  void skip_par_after_tag(unsigned char* inbuffer, int &offset);
+
+  void GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg);
+  void GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg);
+  void SetPointCodes(unsigned int sls, unsigned int opc, unsigned int dpc, unsigned char* msg);
+  void SetPointCodesIUP(unsigned int cic, unsigned int opc, unsigned int dpc, unsigned char* msg);
+  int  ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len);
+  void Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par); //for ITU and ANSI
+  bool Check_M3UA_SingleITUAPC(unsigned int pc, unsigned char* apc_par);
+  void Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int &offset );
+  void processing_MTP3_management_msg(unsigned char* inbuff,int len);
+  void processing_MTP3_test_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_MGMT_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_Transfer_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_SSNM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_ASPSM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_ASPTM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_RKM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_unsupported_msg_class(unsigned char* inbuff,int len);
+  int  Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff);
+  void send_msg(unsigned char *outbuff, int length);
+  void send_M3UA_error_msg(unsigned int error_code, unsigned int add_par );
+  void Check_TestPort_Variables();
+  void Check_TestPort_Variables_STC();
+#endif
+#ifdef TARGET_TEST
+  void Check_Target_TestPort_Variables();
+  void Check_Target_TestPort_Variables_STC();
+
+  //Functions for abstract socket handling
+  void message_incoming(const unsigned char*, int length, int client_id = -1);
+  void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); }
+  void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); }
+  void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); }
+  void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); }
+  void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); }
+  void Handler_Uninstall() { Uninstall_Handler(); }
+  void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE,
+    boolean call_anyway = TRUE, boolean is_periodic = TRUE) {
+    Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic);
+  }
+  const char* local_address_name() { return "localIPAddr";}
+  const char* local_port_name()    { return "localPort";}
+  const char* remote_address_name(){ return "M3UAtarget_TCP_IPAddr";}
+  const char* remote_port_name()   { return "M3UAtarget_TCP_Port";}
+  const char* halt_on_connection_reset_name(){ return "halt_on_connection_reset";}
+  const char* server_mode_name()   { return "client_mode";}
+  const char* socket_debugging_name(){ return "socket_debugging";}
+  const char* nagling_name()       { return "nagling";}
+  const char* server_backlog_name(){ return "server_backlog";}
+  const PacketHeaderDescr* Get_Header_Descriptor() const {return header_descr;}
+#endif
+
+private:
+    void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error);
+    void Handle_Timeout(double time_since_last_call);
+
+    unsigned char M3UA_version;
+    int channel;
+    unsigned char buffer[MAXSIZE];
+    char *destinationname;
+    char *iid_string;
+    boolean Ni_is_set;
+    int Loop,Filter,Sut_Pc,Tester_Pc;
+    typedef enum { AssocDown, AssocEstabl, AssocInac, AssocActive} M3UAStateType_t;
+    M3UAStateType_t M3UAState;
+    int mtp3_ni; // network indicator in case of MTP3
+    int stored_bttc_octet; // used for storage of an additional first byte in MTP3bttc
+    
+#ifndef TARGET_TEST
+    MPH_IID iid;
+    CONNECTION *myConnection;
+#endif
+    bool forward_resume, forward_pause, forward_status;
+#ifdef TARGET_TEST
+    int Tcp_is_up;
+    PacketHeaderDescr *header_descr;
+    bool is_packet_hdr_length_offset, is_packet_hdr_nr_bytes_in_length,
+	    is_packet_hdr_byte_order;
+    int packet_hdr_length_offset, packet_hdr_nr_bytes_in_length;
+    PacketHeaderDescr::HeaderByteOrder packet_hdr_byte_order;
+#endif
+};
+
+extern BOOLEAN f__MTP3__SEA__connect__extern
+  (MTP3asp__PT_PROVIDER& portRef, const CHARSTRING& Hostname,
+   const INTEGER& Port, const CHARSTRING& EntityName,const BOOLEAN& Http);
+
+extern BOOLEAN f__MTP3__SEA__disconnect__extern
+  (MTP3asp__PT_PROVIDER& portRef);
+
+}
+#endif
diff --git a/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn b/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn
new file mode 100644
index 0000000..86b7a83
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/MTP3asp_PortType.ttcn
@@ -0,0 +1,61 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2008                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PortType.ttcn
+//  Reference:    ITU-T Recommendation Q.704, RFC3332 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2008-02-07
+//  Contact:      http://ttcn.ericsson.se
+
+module MTP3asp_PortType
+{
+
+  import from MTP3asp_Types all;
+// *************************************************************************
+// *  MTP3 port type definitions                                           *
+// *************************************************************************
+
+    // MTP3 port type used by the component up to the MTP3 SAP
+    // (eg. any component connected to the MTP3 test port)
+    type port MTP3asp_PT message
+     {
+      in  ASP_MTP3_TRANSFERind;
+      in  ASP_MTP3_PAUSE;
+      in  ASP_MTP3_RESUME;
+      in  ASP_MTP3_STATUS;
+      out ASP_MTP3_TRANSFERreq;
+     } with {extension "provider"}
+
+    // MTP3 port type used by the component up to the MTP3 SAP
+    // (e.g. the distribution component)
+    type port MTP3asp_SP_PT message
+     {
+      in  ASP_MTP3_TRANSFERreq;
+      out ASP_MTP3_TRANSFERind;
+     }
+      with {extension "internal"}
+
+//Connecting functions
+//----------------------------
+external function f_MTP3_SEA_connect
+ ( inout MTP3asp_PT  portRef, 
+   in charstring  Hostname,
+   in integer     Port,
+   in charstring  EntityName,
+   in boolean     Http //or MPH Port is provided  
+ )return boolean;
+
+external function f_MTP3_SEA_disconnect
+ ( inout MTP3asp_PT  portRef
+ )return boolean;
+
+}//eof module
diff --git a/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn b/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn
new file mode 100644
index 0000000..e96f420
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/MTP3asp_Types.ttcn
@@ -0,0 +1,324 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2006                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_Types.ttcn
+//  Description:  CCSS7 Message Transfer Part primitive (ASP) definitions
+//                according to specification ITU-T SS7 MTP3,
+//  Reference:    ITU-T Recommendation Q.704, RFC3332, ANSI T.1.111.1-2001, TCC 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2007-09-17
+//  Contact:      http://ttcn.ericsson.se
+//
+module MTP3asp_Types.objid 
+  { 
+    itu_t(0) identified_organization (4) etsi(0) reserved(127)
+    etsi_identified_organization(0) ericsson(5) testing (0)
+    generic(0) mtp3(0) v96(3) aspDefinitions(3) patchNo(0)
+  }
+
+{//start of the module
+
+// *************************************************************************
+//  External encoding/decoding functions
+// *************************************************************************
+
+external function enc_MTP3_to_M3UAserver_msg (in MTP3_to_M3UAserver_msg pdu)
+  return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+
+external function dec_MTP3_to_M3UAserver_msg(in octetstring stream)
+   return MTP3_to_M3UAserver_msg
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+
+// *************************************************************************
+// *  Type Definitions Part                                                *
+// *************************************************************************
+group Types
+{
+  group MessageTypes
+  {
+    group ASPs
+    {
+    //***********************************************************************
+    //*  ASP type definitions                                               *
+    //*          Note, that ASP types shall be TTCN-3 definitions to allow  *
+    //*          the use of anytype in the data field                       *
+    //***********************************************************************
+
+      type record MTP3_Field_sio
+      {
+        bitstring ni   length(2),
+        bitstring prio length(2),
+        bitstring si   length(4)
+      } with { variant "FIELDORDER(msb)";
+             };
+      
+      type record ASP_MTP3_TRANSFERind
+      {
+        MTP3_Field_sio    sio,
+        integer           opc,
+        integer           dpc,
+        integer           sls,
+        octetstring       data
+      } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (sls) "FIELDLENGTH(8)"
+             };
+
+      type record ASP_MTP3_PAUSE {};
+
+      type record ASP_MTP3_RESUME {};
+
+      type record ASP_MTP3_STATUS {};
+
+      type record ASP_MTP3_TRANSFERreq
+      {
+        MTP3_Field_sio    sio,
+        integer           opc,
+        integer           dpc,
+        integer           sls,
+        octetstring       data
+      } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (sls) "FIELDLENGTH(8)"
+             };
+    }//end group ASPs
+
+    //***********************************************************************
+    //* Type definition of the message which is sent between MTP3 test port *
+    //*  and SCTP server over TCP.                                          *
+    //***********************************************************************
+    group MTP3_SCTPserver
+    {
+      type record ASP_REGISTER_M3UA
+      {
+        integer     ni (0..3),
+        integer     sut_pc,
+        integer     tester_pc,
+        integer     m3ua_version,
+        charstring  entity
+      } with { variant (ni) "FIELDLENGTH(8)";
+               variant (sut_pc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (tester_pc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (m3ua_version) "FIELDLENGTH(8)"
+      };
+      
+      
+      // Possible values:
+      // MTP3_to_SCTPserver_data/status:
+      const integer reg_ok_status      := 0;
+      const integer reg_error_status   := 1;
+      const integer unreg_ok_status    := 2;
+      const integer unreg_error_status := 3;
+
+      const integer send_error_status  := 5;
+      const integer kill_status        := 255;
+      
+      // MTP3_to_SCTPserver_data/pause:
+      const integer SCTP_COMLOST_pause := 0;
+      const integer M3UA_ASPDN_pause   := 1;
+      const integer M3UA_ASPIA_pause   := 2;
+      
+      // MTP3_to_SCTPserver_data/resume:
+      const integer ok_resume := 0;
+      
+      type union MTP3_to_SCTPserver_data
+      {
+        ASP_MTP3_TRANSFERind transfer_ind,
+        ASP_MTP3_TRANSFERreq transfer_req,
+        ASP_REGISTER_M3UA    register,
+        integer              unregister (0..255),
+        integer              status (0..255),
+        integer              pause (0..255),
+        integer              resume (0..255)
+      }
+      
+      // MTP3_to_M3UAserver_msg/msgType:
+      const integer transfer_ind_msgType := 0;
+      const integer transfer_req_msgType := 1;
+      const integer register_msgType     := 2;
+      const integer unregister_msgType   := 3;
+      const integer status_msgType       := 4;
+      const integer pause_msgType        := 5;
+      const integer resume_msgType       := 6;
+      
+      type record MTP3_to_M3UAserver_msg
+      {
+        integer                 msgType (0..255),
+        integer                 msgLength,
+        MTP3_to_SCTPserver_data data
+      } with { variant (data) "CROSSTAG(
+                              transfer_ind, msgType = transfer_ind_msgType;
+                              transfer_req, msgType = transfer_req_msgType;
+                              register,     msgType = register_msgType;
+                              unregister,   msgType = unregister_msgType;
+                              status,       msgType = status_msgType;
+                              pause,        msgType = pause_msgType;
+                              resume,       msgType = resume_msgType )";
+               variant (msgLength) "FIELDLENGTH(32)";
+               variant (msgLength) "LENGTHTO(msgType,msgLength,data)";
+               variant (msgLength) "BYTEORDER(last)"
+             };
+    }//end group MTP3_SCTPserver
+  }//end group Messagetypes
+} with {encode "RAW"}//Types
+
+group Templates
+{
+  group MessageTemplates
+  {
+    group ASPtemplates
+    {
+    // *******************************************************************
+    // *   ASP template definitions                                      *
+    // *******************************************************************
+
+    // Base templates 
+    // These general templates can be used as an example or as a base
+    // template for other templates.
+      template ASP_MTP3_TRANSFERind t_ASP_MTP3_TRANSFERind
+      ( 
+        template MTP3_Field_sio pl_SIO,
+        template integer        pl_OPC,
+        template integer        pl_DPC,
+        template integer        pl_SLS,
+        template octetstring    pl_data
+      ):=
+      {
+        sio  := pl_SIO,
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_sio
+      ( 
+       template bitstring      pl_NI,
+       template bitstring      pl_PRIO,
+       template bitstring      pl_SI,
+       template integer        pl_OPC,
+       template integer        pl_DPC,
+       template integer        pl_SLS,
+       template octetstring    pl_data
+      ):=
+      {
+        sio  := 
+        {
+          ni := pl_NI,
+          prio := pl_PRIO,
+          si := pl_SI
+        },
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind :=
+      {
+        sio  := ?,
+        opc  := ?,
+        dpc  := ?,
+        sls  := ?,
+        data := ?
+      }
+
+      template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq
+      ( 
+        MTP3_Field_sio pl_SIO,
+        integer        pl_OPC,
+        integer        pl_DPC,
+        integer        pl_SLS,
+        octetstring    pl_data
+      ):=
+      {
+        sio  := pl_SIO,
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+
+      template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq_sio
+      ( 
+       template bitstring      pl_NI,
+       template bitstring      pl_PRIO,
+       template bitstring      pl_SI,
+       template integer        pl_OPC,
+       template integer        pl_DPC,
+       template integer        pl_SLS,
+       template octetstring    pl_data
+      ):=
+      {
+        sio  := 
+        {
+          ni := pl_NI,
+          prio := pl_PRIO,
+          si := pl_SI
+        },
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+
+      template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq :=
+      {
+        sio  := ?,
+        opc  := ?,
+        dpc  := ?,
+        sls  := ?,
+        data := ? 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_stc :=
+      {
+        sio  := 
+        {
+          ni := '00'B,
+          prio := '00'B,
+          si := '0000'B
+        },
+        opc  := 0,
+        dpc  := 0,
+        sls  := 0,
+        data := ? 
+      }
+    
+      template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq_stc
+      ( template octetstring    pl_data ):=
+      {
+        sio  := 
+        {
+          ni := '00'B,
+          prio := '00'B,
+          si := '0000'B
+        },
+        opc  := 0,
+        dpc  := 0,
+        sls  := 0,
+        data := pl_data 
+      }
+    
+    }//end group ASPtemplates
+  }//end group Messagetemplates
+}//end group Templates
+
+}//end module
+
+
diff --git a/MTP3asp_CNL113337/demo/Makefile b/MTP3asp_CNL113337/demo/Makefile
new file mode 100644
index 0000000..53b19d3
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/Makefile
@@ -0,0 +1,353 @@
+# This Makefile was generated by the compiler
+# of the TTCN-3 Test Executor version 1.4.pl3
+# for Attila Balasko (ethbaat@duna199) on Mon Sep 15 15:48:45 2003
+
+# Copyright 2000-2003 Conformance Center, Ericsson R & D, Hungary
+# Please send bug reports and comments to Szabo.Janos@eth.ericsson.se
+
+# The following make commands are available:
+# - make, make all       Builds the executable test suite.
+# - make compile         Translates TTCN-3 and ASN.1 modules to C++.
+# - make clean           Removes all generated files.
+# - make dep             Creates/updates dependency list.
+# - make archive         Archives all source files.
+
+#
+# Set these variables...
+#
+
+# The path of your TTCN-3 Test Executor installation:
+# Uncomment this line to override the environment variable.
+# TTCN3_DIR =
+
+# Your platform: (SOLARIS, LINUX, FREEBSD or WIN32)
+PLATFORM = SOLARIS8
+
+# Your C++ compiler:
+CXX = g++
+
+# Flags for the C++ preprocessor (and makedepend as well):
+CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(SEA_DIR)/include
+
+# Flags for the C++ compiler:
+CXXFLAGS = -Wall
+
+# Flags for the linker:
+LDFLAGS =
+
+# Flags for the TTCN-3 and ASN.1 compiler:
+COMPILER_FLAGS = -L
+
+# Execution mode: (either ttcn3 or ttcn3-parallel)
+TTCN3_LIB = ttcn3-parallel
+
+# The path of your OpenSSL installation:
+# If you do not have your own one, leave it unchanged.
+OPENSSL_DIR = $(TTCN3_DIR)
+
+# Directory to store the archived source files:
+# Note: you can set any directory except ./archive
+ARCHIVE_DIR = ./backup
+
+SEA_DIR = /vobs/ttcn/TCC_Releases/Other/SEA_LATEST
+#
+# You may change these variables. Add your files if necessary...
+#
+
+# The TTCN-3 modules needed for this project:
+TTCN3_MODULES = mtp3test.ttcn MTP3asp_Types.ttcn MTP3asp_PortType.ttcn
+# The ASN.1 modules needed for this project:
+ASN1_MODULES =
+
+# C++ source & header files generated by TTCN-3 & ASN.1 compilers:
+GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc)
+GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
+# Source & header files of Test Ports and your other modules:
+USER_SOURCES = MTP3asp_PT.cc
+USER_HEADERS = MTP3asp_PT.hh
+
+# All object files needed for the executable test suite:
+#OBJECTS = mtp3test.o MTP3_ASPs.o general_typedefs.o MTP3user_porttype.o
+OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o) 
+# The name of the executable test suite:
+TARGET = mtp3test
+
+#The names of the config files (to archive):
+TARGET_CONFIGS = mtp3test_MTP3_ansi2.cfg
+#
+# Do not modify these unless you know what you are doing...
+#
+SOLARIS_LIBS = -lxnet
+LINUX_LIBS =
+FREEBSD_LIBS =
+WIN32_LIBS =
+
+#
+# Rules for building the executable...
+#
+all: $(TARGET) ;
+
+$(TARGET): $(OBJECTS)
+	$(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \
+        -L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \
+	-L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) $(SEA_DIR)/lib/libmphclib.a -lxml2
+
+.cc.o .c.o:
+	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $<
+
+$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
+	@if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi
+
+compile: $(TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $(TTCN3_MODULES) \
+	$(ASN1_MODULES) - $?
+	touch $@
+
+clean:
+	-$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \
+	$(GENERATED_SOURCES) compile *.log
+
+dep: $(GENERATED_SOURCES)
+	makedepend $(CPPFLAGS) $(USER_SOURCES) $(GENERATED_SOURCES)
+
+archive:
+	mkdir -p $(ARCHIVE_DIR)
+	tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \
+	$(USER_HEADERS) $(USER_SOURCES) $(TARGET_CONFIGS) Makefile \
+	| gzip >$(ARCHIVE_DIR)/$(TARGET)-`date '+%y%m%d-%H%M'`.tgz
+
+#
+# Add your rules here if necessary...
+#
+
+# DO NOT DELETE
+
+MTP3asp_PT.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+MTP3asp_PT.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+MTP3asp_PT.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+MTP3asp_PT.o: /usr/include/stdio_impl.h /usr/include/stdlib.h
+MTP3asp_PT.o: /usr/include/iso/stdlib_iso.h /usr/include/sys/types.h
+MTP3asp_PT.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_PT.o: /usr/include/sys/select.h /usr/include/sys/time.h
+MTP3asp_PT.o: /usr/include/time.h /usr/include/iso/time_iso.h
+MTP3asp_PT.o: /usr/include/netinet/in.h /usr/include/sys/stream.h
+MTP3asp_PT.o: /usr/include/sys/vnode.h /usr/include/sys/t_lock.h
+MTP3asp_PT.o: /usr/include/sys/machlock.h /usr/include/sys/param.h
+MTP3asp_PT.o: /usr/include/sys/unistd.h /usr/include/sys/mutex.h
+MTP3asp_PT.o: /usr/include/sys/rwlock.h /usr/include/sys/semaphore.h
+MTP3asp_PT.o: /usr/include/sys/condvar.h /usr/include/sys/time_impl.h
+MTP3asp_PT.o: /usr/include/sys/cred.h /usr/include/sys/uio.h
+MTP3asp_PT.o: /usr/include/sys/resource.h /usr/include/vm/seg_enum.h
+MTP3asp_PT.o: /usr/include/sys/poll.h /usr/include/sys/strmdep.h
+MTP3asp_PT.o: /usr/include/sys/model.h /usr/include/sys/strft.h
+MTP3asp_PT.o: /usr/include/sys/byteorder.h /usr/include/netdb.h
+MTP3asp_PT.o: /usr/include/sys/socket.h /usr/include/sys/netconfig.h
+MTP3asp_PT.o: /usr/include/sys/un.h /usr/include/net/if_dl.h
+MTP3asp_PT.o: /usr/include/sys/wait.h /usr/include/sys/siginfo.h
+MTP3asp_PT.o: /usr/include/sys/machsig.h /usr/include/sys/procset.h
+MTP3asp_PT.o: /usr/include/unistd.h /usr/include/arpa/inet.h
+MTP3asp_PT.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_PT.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_PT.o: MTP3asp_PT.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh
+MTP3asp_PT.o: /usr/include/regex.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh
+MTP3asp_PT.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+MTP3asp_PT.o: MTP3asp_Types.hh MTP3asp_PortType.hh
+mtp3test.o: mtp3test.hh MTP3asp_PortType.hh MTP3asp_Types.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h
+mtp3test.o: /usr/include/string.h /usr/include/iso/string_iso.h
+mtp3test.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+mtp3test.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+mtp3test.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+mtp3test.o: /usr/include/stdio_impl.h
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh
+mtp3test.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+mtp3test.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+mtp3test.o: /usr/include/sys/time.h /usr/include/sys/types.h
+mtp3test.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+mtp3test.o: /usr/include/sys/select.h /usr/include/time.h
+mtp3test.o: /usr/include/iso/time_iso.h
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh
+mtp3test.o: /usr/include/regex.h
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh
+mtp3test.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh
+mtp3test.o: MTP3asp_PT.hh
+mtp3test.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+MTP3asp_Types.o: MTP3asp_Types.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h
+MTP3asp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+MTP3asp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+MTP3asp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+MTP3asp_Types.o: /usr/include/stdio_impl.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh
+MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+MTP3asp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h
+MTP3asp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_Types.o: /usr/include/sys/select.h /usr/include/time.h
+MTP3asp_Types.o: /usr/include/iso/time_iso.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh
+MTP3asp_Types.o: /usr/include/regex.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh
+MTP3asp_PortType.o: MTP3asp_PortType.hh MTP3asp_Types.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TTCN3.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/version.h
+MTP3asp_PortType.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_PortType.o: /usr/include/sys/feature_tests.h
+MTP3asp_PortType.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h
+MTP3asp_PortType.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h
+MTP3asp_PortType.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Basetype.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Types.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Encdec.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Template.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Integer.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Optional.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/BER.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Logger.hh
+MTP3asp_PortType.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+MTP3asp_PortType.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_PortType.o: /usr/include/sys/time.h /usr/include/sys/types.h
+MTP3asp_PortType.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_PortType.o: /usr/include/sys/select.h /usr/include/time.h
+MTP3asp_PortType.o: /usr/include/iso/time_iso.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Textbuf.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Error.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Parameters.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Float.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Boolean.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Null.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Objid.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Verdicttype.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Component.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Bitstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/RAW.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Hexstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Octetstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_Any.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Charstring.hh
+MTP3asp_PortType.o: /usr/include/regex.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Universal_charstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Struct_of.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Array.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_CharacterString.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_External.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/ASN_EmbeddedPDV.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Addfunc.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Timer.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Port.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Module_list.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Snapshot.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Default.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/Runtime.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-1.7.pl2-gcc3.4.6/include/TEXT.hh
+MTP3asp_PortType.o: MTP3asp_PT.hh
+MTP3asp_PortType.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
diff --git a/MTP3asp_CNL113337/demo/mtp3test.ttcn b/MTP3asp_CNL113337/demo/mtp3test.ttcn
new file mode 100644
index 0000000..1c84250
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/mtp3test.ttcn
@@ -0,0 +1,292 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Copyright Test Competence Center (TCC) ETH 2003
+//
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         mtp3test.cc
+//  Description:  basic test for MTP3asp_PT
+//  Rev:          <RnXnn>
+//  Prodnr:       CNL 113 337 
+//  Updated:      2004.06.02
+//  Contact:      http://ttcn.ericsson.se
+ 
+
+module mtp3test
+{
+
+modulepar
+{
+  //mtp3test specific data:
+  //OCT1n   MTP3_UserPart_SIO;
+  MTP3_Field_sio MTP3_UserPart_SIO;
+  integer MTP3_UserPart_OPC,
+          MTP3_UserPart_DPC,
+          MTP3_UserPart_SLS
+};//modulepar 
+
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+/*************************************
+*   Components
+**************************************/
+
+/*
+****************  1:      2: ************************
+* MTP3UserPart * <---------> *   MTP3/M3UA in MSC   * 
+****************   (MTP3port)************************
+1: MTP3asp_PT MTP3_PCO  alias: e.g. CMGW6
+ 
+*/
+
+type record of MTP3UserPart_CT CompArray;
+
+type component MTC_CT
+{
+  port MTP3asp_PT MTC_PCO;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_BSC1A;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_BSC1B;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_BSC1C;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_CMGW3;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_CMGW6;
+  var  MTP3UserPart_CT  vc_MTP3UserPart_CMGW9;
+  var  MTP3UserPart_CT  vc_compArray[6];
+};
+
+// Model of MSC:
+type component MSC_SCT
+{
+  port MTP3asp_PT  BSC1A;
+  port MTP3asp_PT  BSC1B;
+  port MTP3asp_PT  BSC1C;   
+  port MTP3asp_PT  CMGW3;
+  port MTP3asp_PT  CMGW6;
+  port MTP3asp_PT  CMGW9;
+};
+
+//Model of SS7 MTP3 User Part for Self Test. Only logs the messages
+type component MTP3UserPart_CT
+{
+  var ASP_MTP3_TRANSFERind  v_MTP3_TRANSFERind;
+  var ASP_MTP3_TRANSFERreq  v_MTP3_TRANSFERreq;
+  port MTP3asp_PT           MTP3_PCO;
+  // port ... to the upper layers
+} // end component type definition
+
+/*
+function MTC_delay(integer time) runs on MTC_CT {
+  timer t:=time;
+  t.start;
+  setverdict(none);
+  alt{ []t.timeout {} }
+ }
+*/
+
+function mtp3_selftest( ) runs on MTP3UserPart_CT 
+{    
+  timer t_Guard := 6.0;
+  log( "mtp3_selftest started");
+  t_Guard.start;
+  setverdict(none);
+  alt
+  { 
+    [] MTP3_PCO.receive ( ASP_MTP3_TRANSFERind:?)  -> value v_MTP3_TRANSFERind 
+      {
+        log("ASP_MTP3_TRANSFERind: received");
+        setverdict(pass);
+        repeat;
+      } 
+    [] MTP3_PCO.receive
+      {
+        log("Unknown signal received");
+        setverdict(pass);
+        repeat;
+      }
+    [] t_Guard.timeout 
+      { log("timeout reached");}
+  } //alt
+  log("mtp3_selftest finished");
+}
+
+function f_init( ) runs on MTC_CT
+{
+  vc_MTP3UserPart_BSC1A := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_BSC1B := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_BSC1C := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW3 := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW6 := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW9 := MTP3UserPart_CT.create;
+
+  map(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A);
+  map(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B);
+  map(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C);
+  map(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3);
+  map(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6);
+  map(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9);
+
+  log("tc_3 map is ready");
+}
+
+function f_start() runs on MTC_CT
+{
+  vc_MTP3UserPart_BSC1A.start( mtp3userpart_test() );
+  vc_MTP3UserPart_BSC1B.start( mtp3userpart_test() );
+  vc_MTP3UserPart_BSC1C.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW3.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW6.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW9.start( mtp3userpart_test() );
+}
+
+function f_terminate() runs on MTC_CT
+{
+  all component.done;
+  unmap(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A);
+  unmap(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B);
+  unmap(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C);
+  unmap(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3);
+  unmap(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6);
+  unmap(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9);
+}
+
+function mtp3userpart_test( ) runs on MTP3UserPart_CT {
+  timer t_Guard := 5.0;
+  log( "mtp3userpart_test started");
+  v_MTP3_TRANSFERreq := 
+  {
+    sio := MTP3_UserPart_SIO,
+    opc := MTP3_UserPart_OPC,
+    dpc := MTP3_UserPart_DPC,
+    sls := 0,
+    data:= '010203040506070809000102030405060708090000010203040506070809000000'O
+  };
+  MTP3_PCO.send( v_MTP3_TRANSFERreq );
+  t_Guard.start;
+  setverdict(none);
+  alt 
+  {
+    [] MTP3_PCO.receive ( ASP_MTP3_TRANSFERind:? )  -> value v_MTP3_TRANSFERind
+      {
+        log("ASP_MTP3_TRANSFERind: received");
+        setverdict(pass);
+        repeat;
+      } 
+    [] MTP3_PCO.receive
+      {
+        log("Unknown signal received");
+        setverdict(pass);
+        repeat;
+      }
+    [] t_Guard.timeout
+      {
+        //setverdict(inconc);
+        log("timeout reached");
+      }
+  } //alt
+  log("mtp3userpart_test finished");
+}
+
+testcase tc_1() runs on MTC_CT system MSC_SCT
+{
+  log ("tc_1 started");
+  var MTP3UserPart_CT vc_MTP3userpart;
+  vc_MTP3userpart := MTP3UserPart_CT.create;
+  map(vc_MTP3userpart:MTP3_PCO, system:CMGW6);
+  log("map is ready");
+  vc_MTP3userpart.start( mtp3_selftest() );
+  //MTC_delay(6);
+  vc_MTP3userpart.done;
+  unmap(vc_MTP3userpart:MTP3_PCO, system:CMGW6);
+  log ("tc_1 finished");
+}
+
+// TC2: Testcase sending one simple message "MTP-transfer-req" and waiting
+testcase tc_2() runs on MTC_CT system MSC_SCT
+{
+  log ("tc_2 started");
+  var MTP3UserPart_CT vc_MTP3userpart;  
+  vc_MTP3userpart := MTP3UserPart_CT.create;
+  map(vc_MTP3userpart:MTP3_PCO, system:CMGW6);
+  log("map is ready");  
+  vc_MTP3userpart.start( mtp3userpart_test() );
+  //MTC_delay(6);  
+  vc_MTP3userpart.done;
+  unmap(vc_MTP3userpart:MTP3_PCO, system:CMGW6);
+  log ("tc_2 finished");
+}
+
+testcase tc_3() runs on MTC_CT system MSC_SCT
+{
+  log ("tc_3 started");
+  vc_MTP3UserPart_BSC1A := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_BSC1B := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_BSC1C := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW3 := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW6 := MTP3UserPart_CT.create;
+  vc_MTP3UserPart_CMGW9 := MTP3UserPart_CT.create;
+  
+  map(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A);
+  map(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B);
+  map(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C);
+  map(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3);
+  map(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6);
+  map(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9);
+  
+  log("tc_3 map is ready");  
+  vc_MTP3UserPart_BSC1A.start( mtp3userpart_test() );
+  vc_MTP3UserPart_BSC1B.start( mtp3userpart_test() );
+  vc_MTP3UserPart_BSC1C.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW3.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW6.start( mtp3userpart_test() );
+  vc_MTP3UserPart_CMGW9.start( mtp3userpart_test() );
+  
+  //MTC_delay(6);  
+  all component.done;
+  unmap(vc_MTP3UserPart_BSC1A:MTP3_PCO,system:BSC1A);
+  unmap(vc_MTP3UserPart_BSC1B:MTP3_PCO,system:BSC1B);
+  unmap(vc_MTP3UserPart_BSC1C:MTP3_PCO,system:BSC1C);
+  unmap(vc_MTP3UserPart_CMGW3:MTP3_PCO,system:CMGW3);
+  unmap(vc_MTP3UserPart_CMGW6:MTP3_PCO,system:CMGW6);
+  unmap(vc_MTP3UserPart_CMGW9:MTP3_PCO,system:CMGW9); 
+  log ("tc_3 finished"); 
+} 
+
+// tc_4 is the same as tc_3 but organized by arrays and cycles
+testcase tc_4() runs on MTC_CT system MSC_SCT
+{
+  f_init();
+  f_start();
+  f_terminate();
+}
+
+testcase tc_5() runs on MTC_CT
+{
+  var ASP_MTP3_TRANSFERreq vl_MTP3_TRANSFERreq := 
+  { sio := 
+    { ni := '00'B,
+      prio := '00'B,
+      si := '0000'B
+    },
+    opc := 0,
+    dpc := 0,
+    sls := 0,
+    data:= '010203040506070809000102030405060708090000010203040506070809000000'O
+  };
+
+  map(self:MTC_PCO,system:MTC_PCO);
+  MTC_PCO.send(vl_MTP3_TRANSFERreq);
+  MTC_PCO.receive;
+  unmap(self:MTC_PCO,system:MTC_PCO);
+}
+
+control
+{
+  execute (tc_1());
+}
+
+}//module
diff --git a/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg b/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg
new file mode 100644
index 0000000..35b3e09
--- /dev/null
+++ b/MTP3asp_CNL113337/demo/mtp3test_MTP3_ansi2.cfg
@@ -0,0 +1,75 @@
+[LOGGING]
+#FileName := "mtp3test_MTP3_ansi2.cfg"
+FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+
+[EXECUTE]
+#Loopback
+#mtp3test.TC0
+#SEA test cases, LOOP := OFF
+#mtp3test.tc_1
+#mtp3test.tc_2
+#mtp3test.tc_3
+mtp3test.tc_4
+[TESTPORT_PARAMETERS]
+// *******************************************************
+// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA *
+// *******************************************************
+system.*.Hostname := "zaire"  //sea server name
+system.*.HttpPort := "5000"   //sea http port
+system.*.Loop:= "ON"
+system.*.Filter:= "OFF"
+system.*.MTP3ServiceType := "MTP3itu" // ["MTP3itu" (default)|"MTP3ansi" | "M3UA" | "MTP3ttc" | "MTP3mpt" ]
+
+system.CMGW3.EntityName := "S7ST-0" //device name to connect
+system.CMGW3.NI:= "2"
+system.CMGW3.SUT_Pc:= "461088" 
+system.CMGW3.TESTER_Pc:= "461089"  
+system.CMGW3.M3UA_version:= "1"
+
+system.CMGW6.EntityName := "S7ST-1" //device name to connect
+system.CMGW6.NI:= "2"
+system.CMGW6.SUT_Pc:= "461086" // 07-09-30  =0x07091E see command: s7stp:st=s7stg-0&&-32;
+system.CMGW6.TESTER_Pc:= "461087" //07-09-31=0x07091F
+system.CMGW6.M3UA_version:= "1"
+
+system.CMGW9.EntityName := "S7ST-2" //device name to connect
+system.CMGW9.NI:= "2"
+system.CMGW9.SUT_Pc:= "461088" 
+system.CMGW9.TESTER_Pc:= "461089"  
+system.CMGW9.M3UA_version:= "1"
+
+system.BSC1A.EntityName := "S7ST-3" //device name to connect
+system.BSC1A.NI:= "2"
+system.BSC1A.SUT_Pc:= "461088" 
+system.BSC1A.TESTER_Pc:= "461089"  
+system.BSC1A.M3UA_version:= "1"
+
+system.BSC1B.EntityName := "S7ST-4" //device name to connect
+system.BSC1B.NI:= "2"
+system.BSC1B.SUT_Pc:= "461088" 
+system.BSC1B.TESTER_Pc:= "461089"  
+system.BSC1B.M3UA_version:= "1"
+
+system.BSC1C.EntityName := "S7ST-5" //device name to connect
+system.BSC1C.NI:= "2"
+system.BSC1C.SUT_Pc:= "461088" 
+system.BSC1C.TESTER_Pc:= "461089"  
+system.BSC1C.M3UA_version:= "1"
+
+[MODULE_PARAMETERS]
+
+// MTP3_user_part for test suite 'mtp3userpart_test' in mtp3test.ttcn 
+MTP3_UserPart_SIO := 
+{
+  ni := '10'B,
+  prio := '00'B,
+  si := '1110'B
+};
+MTP3_UserPart_OPC := 461087  // =0x07091E 
+MTP3_UserPart_DPC := 461086 //
+MTP3_UserPart_SLS := 0;
+ 
+[MAIN_CONTROLLER]
+TCPPort := 9999
+NumHCs := 1 
diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf
new file mode 100644
index 0000000..b6cf46f
--- /dev/null
+++ b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_FS.pdf
Binary files differ
diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf
new file mode 100644
index 0000000..4e8b25c
--- /dev/null
+++ b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_PRI.pdf
Binary files differ
diff --git a/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf
new file mode 100644
index 0000000..0c6b3d7
--- /dev/null
+++ b/MTP3asp_CNL113337/doc/MTP3asp_CNL113337_UG.pdf
Binary files differ
diff --git a/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc b/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc
new file mode 100644
index 0000000..394d726
--- /dev/null
+++ b/MTP3asp_CNL113337/src/MTP3asp_EncDec.cc
@@ -0,0 +1,20 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+// Copyright Test Competence Center (TCC) ETH 2007
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:               MTP3asp_EncDec.cc
+//  Rev:                R11A01
+//  Prodnr:             CNL 113 337
+//  Updated:            2007-09-17
+//  Contact:            http://ttcn.ericsson.se
+///////////////////////////////////////////////////////////////////////////////
+
+// Please note: Because the encoder/decoder functions are generated by the 
+// TITAN, the MTP3asp_EncDec.cc is kept only for compatibility issue and 
+// should be removed from the projects.
diff --git a/MTP3asp_CNL113337/src/MTP3asp_PT.cc b/MTP3asp_CNL113337/src/MTP3asp_PT.cc
new file mode 100644
index 0000000..37bab8f
--- /dev/null
+++ b/MTP3asp_CNL113337/src/MTP3asp_PT.cc
@@ -0,0 +1,2952 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2012                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PT.cc
+//  Description:  Implementation of port MTP3asp_PT
+//                This test port is written to connect TTCN-3 to SEA according
+//                to specification ITU-T SS7 MTP3, ANSI, TCC, IETF, MPT
+//  Reference:    ITU-T Recommendation Q.704, RFC3332
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2012-05-24
+//  Contact:      http://ttcn.ericsson.se
+
+// IMPORTANT MODIFICATION:
+// mtp3_ttc uses ALWAYS 16 bits long SPCs, regardless of mtp3_ni sio
+
+#include "MTP3asp_PT.hh"
+
+#include "MTP3asp_Types.hh"
+#include "MTP3asp_PortType.hh"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <poll.h>
+#include <errno.h>
+#include <stdarg.h>
+#include <string.h>
+
+
+//  Constans for M3UA, see rfc 3332 and 2/1056-FCPW 101 86/P-1
+// Constants for decoding M3UA common headers
+#define M3UA_VER_OFFS      0
+#define M3UA_CLS_OFFS      2
+#define M3UA_TYP_OFFS      3
+#define M3UA_LGT_OFFS      4
+#define M3UA_MSG_OFFS      8
+#define M3UA_MSG_LENGTH_LENGTH      4
+
+// Constants for M3UA protocol
+//Msg classes
+#define M3UA_MSG_CLS_MGMT 0x00
+#define M3UA_MSG_CLS_TRNSFM 0x01
+#define M3UA_MSG_CLS_SSNM 0x02
+#define M3UA_MSG_CLS_ASPSM 0x03
+#define M3UA_MSG_CLS_ASPTM 0x04
+#define M3UA_MSG_CLS_RKM 0x09
+//Msg types
+#define M3UA_MSG_TYP_MGMT_ERR 0x00
+#define M3UA_MSG_TYP_MGMT_NTFY 0x01
+
+#define M3UA_MSG_TYP_TRSNFM_DATA 0x01
+
+#define M3UA_MSG_TYP_SSNM_DUNA 0x01
+#define M3UA_MSG_TYP_SSNM_DAVA 0x02
+#define M3UA_MSG_TYP_SSNM_DAUD 0x03
+#define M3UA_MSG_TYP_SSNM_SCON 0x04
+#define M3UA_MSG_TYP_SSNM_DUPU 0x05
+#define M3UA_MSG_TYP_SSNM_DRST 0x06
+
+#define M3UA_MSG_TYP_ASPSM_ASPUP 0x01
+#define M3UA_MSG_TYP_ASPSM_ASPDN 0x02
+#define M3UA_MSG_TYP_ASPSM_BEAT 0x03
+#define M3UA_MSG_TYP_ASPSM_ASPUPAck 0x04
+#define M3UA_MSG_TYP_ASPSM_ASPDNAck 0x05
+#define M3UA_MSG_TYP_ASPSM_BEATAck 0x06
+
+#define M3UA_MSG_TYP_ASPTM_ASPAC 0x01
+#define M3UA_MSG_TYP_ASPTM_ASPIA 0x02
+#define M3UA_MSG_TYP_ASPTM_ASPACAck 0x03
+#define M3UA_MSG_TYP_ASPTM_ASPIAAck 0x04
+
+#define M3UA_MSG_TYP_RKM_REGREQ 0x01
+#define M3UA_MSG_TYP_RKM_REGRSP 0x02
+#define M3UA_MSG_TYP_RKM_DEREGREQ 0x03
+#define M3UA_MSG_TYP_RKM_DEREGRESP 0x04
+
+//parameters
+//common for all adaptation layer
+#define PAR_PREFIX_COMMON 0x00
+#define PAR_INFO_STR    0x04
+#define PAR_ROUTING_CTX 0x06
+#define PAR_DIAG_INFO   0x07
+#define PAR_HEART_BEAT  0x09
+#define PAR_TRAFFMODE_T 0x0b
+#define PAR_ERROR_CODE  0x0c
+#define PAR_STATUS      0x0d
+#define PAR_ASP_ID      0x11
+#define PAR_AFFECTED_PC 0x12
+#define PAR_CORREL_ID   0x13
+
+//M3UA specific
+#define PAR_PREFIX_M3UA 0x02
+#define PAR_NETW_APP    0x00
+#define PAR_USR_O_CAUSE 0x04
+#define PAR_CNGST_IND   0x05
+#define PAR_CNCRD_IND   0x06
+#define PAR_ROUTING_KEY 0x07
+#define PAR_REG_RSLT    0x08
+#define PAR_DEREG_RSLT  0x09
+#define PAR_LOC_RK_ID   0x0a
+#define PAR_DPC         0x0b
+#define PAR_SI          0x0c
+#define PAR_OPC_LIST    0x0e
+#define PAR_CIRC_RNG    0x0f
+#define PAR_PROT_DATA   0x10
+#define PAR_REG_STAT    0x12
+#define PAR_DEREG_STAT  0x13
+
+// error codes:
+#define PAR_ERRC_IVER   0x01
+#define PAR_ERRC_UNSMC  0x03
+#define PAR_ERRC_UNSMT  0x04
+#define PAR_ERRC_UNTMT  0x05
+#define PAR_ERRC_UNEM   0x06
+#define PAR_ERRC_PERR   0x07
+#define PAR_ERRC_ISI    0x09
+#define PAR_ERRC_RMB    0x0D
+#define PAR_ERRC_ASPIDR 0x0E
+#define PAR_ERRC_IASPID 0x0F
+#define PAR_ERRC_IPARV  0x11
+#define PAR_ERRC_PARFE  0x12
+#define PAR_ERRC_UPAR   0x13
+#define PAR_ERRC_DSU    0x14
+#define PAR_ERRC_INA    0x15
+#define PAR_ERRC_MP     0x16
+#define PAR_ERRC_IRC    0x19
+#define PAR_ERRC_NCFAS  0x1A
+
+
+// --------------------------
+// Basic Test Port functions
+// --------------------------
+using namespace MTP3asp__Types;
+namespace MTP3asp__PortType {
+
+//external functions
+//##########################################################
+
+//f__MTP3__SEA__connect (for MTP3asp_PT)
+BOOLEAN f__MTP3__SEA__connect(MTP3asp__PT& portRef,
+  const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http)
+{
+  return f__MTP3__SEA__connect__extern(portRef,Hostname,Port,EntityName,Http);
+}
+//------------
+
+//f__MTP3__SEA__disconnect (for MTP3asp_PT)
+BOOLEAN f__MTP3__SEA__disconnect(MTP3asp__PT& portRef)
+{
+  return f__MTP3__SEA__disconnect__extern(portRef);
+}
+//------------
+
+//f__MTP3__SEA__connect__extern
+BOOLEAN f__MTP3__SEA__connect__extern(MTP3asp__PT_PROVIDER& portRef,
+  const CHARSTRING& Hostname,const INTEGER& Port,const CHARSTRING& EntityName,const BOOLEAN& Http)
+{
+#ifndef TARGET_TEST
+  if (portRef.dynamicConnection && (!(portRef.connectionUp)))
+  {
+    delete [] portRef.hostname;
+    int len = strlen(Hostname);
+    portRef.hostname = new char[len + 1];
+    memcpy(portRef.hostname, Hostname, len + 1);
+
+    portRef.httpport = Port;
+
+    delete [] portRef.entityname;
+    len = strlen(EntityName);
+    portRef.entityname = new char[len + 1];
+    memcpy(portRef.entityname, EntityName, len + 1);
+
+    if(Http)
+      portRef.MTP3_open_channel(TRUE);
+    else
+      portRef.MTP3_open_channel(FALSE);
+
+    if(portRef.wait_for_open())
+    { 
+      portRef.user_connect();
+      portRef.connectionUp = TRUE;
+      return TRUE;
+    }
+  }
+  else
+#endif
+    portRef.log("Dynamic connection feature is not active or already connected.");
+  return FALSE;
+}
+//------------
+
+//f__MTP3__SEA__disconnect__extern
+BOOLEAN f__MTP3__SEA__disconnect__extern(MTP3asp__PT_PROVIDER& portRef)
+{
+#ifndef TARGET_TEST
+  if (portRef.connectionUp)
+  {
+    portRef.MTP3_close_connection();
+    portRef.connectionUp = FALSE;
+    return TRUE;
+  }
+#endif
+  return FALSE;
+}
+//------------
+
+// Test Port constructor
+MTP3asp__PT_PROVIDER::MTP3asp__PT_PROVIDER(const char *par_port_name)
+        : PORT(par_port_name)
+{
+  MTP_fd=-1;
+  httpport=-1;
+  hostname=NULL;
+  destinationname = NULL;
+  dynamicConnection = FALSE;
+
+  const char *str="b303d76a-266c-11d4-b8f5-08002090d3da";
+  int len = strlen(str);
+  iid_string= new char[len + 1];
+  memcpy(iid_string, str, len + 1);
+
+  entityname=NULL;
+  Filter=Loop=-1;
+  Sut_Pc=Tester_Pc=-1;
+  Ni_is_set = FALSE;
+  MTPServiceType = MTP3itu;
+  M3UA_version = 1;
+  M3UAState = AssocDown; // unnecessary...
+  mtp3_ni=0;
+#ifndef TARGET_TEST
+  user_map_p = &MTP3asp__PT_PROVIDER::MTP3_user_map;
+  user_unmap_p = &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+  interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+#endif
+  forward_pause = FALSE;
+  forward_resume = FALSE;
+  forward_status = FALSE;
+}
+//------------
+
+// Test Port destructor
+MTP3asp__PT_PROVIDER::~MTP3asp__PT_PROVIDER()
+{
+  delete [] hostname;
+  delete [] entityname;
+  delete [] iid_string;
+}
+//------------
+
+// set_parameter
+void MTP3asp__PT_PROVIDER::set_parameter(const char *parameter_name,
+        const char *parameter_value)
+{
+  log("set_parameter: %s = %s",parameter_name,parameter_value);
+  if (!strcmp(parameter_name,"Hostname"))
+  {
+    delete [] hostname;
+    int len = strlen(parameter_value);
+    hostname = new char[len + 1];
+    memcpy(hostname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name, "HttpPort"))
+  {
+    httpport = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"EntityName"))
+  {
+    delete [] entityname;
+    int len = strlen(parameter_value);
+    entityname= new char[len + 1];
+    memcpy(entityname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name,"DestinationName"))
+  {
+    delete [] destinationname;
+    int len = strlen(parameter_value);
+    destinationname= new char[len + 1];
+    memcpy(destinationname, parameter_value, len + 1);
+  }
+  else if (!strcmp(parameter_name,"Filter"))
+  {
+    if (!strcmp(parameter_value,"ON")) Filter = MTP3_ON;
+    else Filter = MTP3_OFF;
+  }
+  else if (!strcmp(parameter_name,"Loop"))
+  {
+    if (!strcmp(parameter_value,"ON")) Loop = MTP3_ON;
+    else Loop = MTP3_OFF;
+  }
+  else if (!strcmp(parameter_name,"NI"))
+  {
+    Ni_is_set = TRUE;
+    mtp3_ni = atoi(parameter_value);
+    debuglog("Network indicator is set to %i",mtp3_ni);
+  }
+  else if (!strcmp(parameter_name,"SUT_Pc"))
+  {
+    Sut_Pc = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"TESTER_Pc"))
+  {
+    Tester_Pc = atoi(parameter_value);
+  }
+  else if (!strcmp(parameter_name,"M3UA_version"))
+  {
+    M3UA_version  = atoi(parameter_value);
+    debuglog("%d",M3UA_version);
+  }
+#ifndef TARGET_TEST
+  else if (!strcmp(parameter_name,"DynamicConnection"))
+  {
+    if (!strcasecmp(parameter_value,"ON"))
+    {
+      dynamicConnection = TRUE;
+    }
+  }
+#endif
+  else if (!strcmp(parameter_name,"MTP3ServiceType"))
+  {
+    if (!strcmp(parameter_value,"TargetM3UA"))
+    {
+#ifndef TARGET_TEST
+      error("TargetM3UA not supported, since TARGET_TEST not in Makefile");
+#else
+      log("MTP3ServiceType is set to TargetM3UA");
+      user_map_p =  &MTP3asp__PT_PROVIDER::Target_user_map;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::Target_user_unmap;
+      MTPServiceType = TargetM3UA;
+#endif
+    }
+    else if (!strcmp(parameter_value,"TargetSTC"))
+    {
+#ifndef TARGET_TEST
+      error("TargetSTC not supported, since TARGET_TEST not in Makefile");
+#else
+      log("MTP3ServiceType is set to TargetSTC");
+      user_map_p =  &MTP3asp__PT_PROVIDER::TargetSTC_user_map;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::Target_user_unmap; //Same as by Target M3UA
+      MTPServiceType = TargetSTC;
+#endif
+    }
+#ifndef TARGET_TEST
+    else if (!strcmp(parameter_value,"M3UA"))
+    { //M3UA
+      log("MTP3ServiceType is set to M3UA");
+      interpreter = &MTP3asp__PT_PROVIDER::M3UA_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::M3UA_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::M3UA_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::M3UA_user_unmap;
+      MTPServiceType = M3UA;
+    }
+    else if (!strcmp(parameter_value,"MTP3itu"))
+    {
+      log("MTP3ServiceType is set to MTP3itu");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3itu;
+    }
+    else if ( !strcmp(parameter_value,"MTP3ansi"))
+    {
+      log("MTP3ServiceType is set to MTP3ansi");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3ansi;
+    }
+    else if ( !strcmp(parameter_value,"MTP3ttc"))
+    {
+      log("MTP3ServiceType is set to MTP3ttc");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3ttc;
+    }
+    else if ( !strcmp(parameter_value,"MTP3mpt"))
+    {
+      log("MTP3ServiceType is set to MTP3mpt");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3mpt;
+    }
+    else if ( !strcmp(parameter_value,"MTP3bttc"))
+    {
+      log("MTP3ServiceType is set to MTP3bttc");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3bttc;
+    }
+    else if ( !strcmp(parameter_value,"MTP3iup"))
+    {
+      log("MTP3ServiceType is set to MTP3iup");
+      interpreter = &MTP3asp__PT_PROVIDER::MTP3_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::MTP3_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::MTP3_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::MTP3_user_unmap;
+      MTPServiceType = MTP3iup;
+    }
+    else if ( !strcmp(parameter_value,"STC"))
+    {
+      log("MTP3ServiceType is set to STC");
+      interpreter = &MTP3asp__PT_PROVIDER::STC_interpreter;
+      user_map_p =  &MTP3asp__PT_PROVIDER::STC_user_map;
+      user_connect_p =  &MTP3asp__PT_PROVIDER::STC_user_connect;
+      user_unmap_p =  &MTP3asp__PT_PROVIDER::STC_user_unmap;
+      MTPServiceType = STC;
+    }
+#endif
+    else
+    {
+      log("Unsupported MTP3ServiceType: %s, falling back to MTP3itu",
+          parameter_value);
+    }
+  }
+  else if(strcasecmp(parameter_name, "forward_pause") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_pause = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_pause = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else if(strcasecmp(parameter_name, "forward_resume") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_resume = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_resume = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else if(strcasecmp(parameter_name, "forward_status") == 0)
+  {
+    if (strcasecmp(parameter_value,"forward") == 0)
+      forward_status = TRUE;
+    else if(strcasecmp(parameter_value,"ignore") == 0)
+      forward_status = FALSE;
+    else
+      error("set_parameter(): Invalid parameter value: %s for parameter %s. Only forward and ignore can be used!" ,
+            parameter_value, parameter_name);
+  }
+  else
+#ifdef TARGET_TEST
+  if(!parameter_set(parameter_name ,parameter_value)) //TCP parameters
+#endif
+    log("Unsupported parameter: %s", parameter_name);
+}
+//------------
+
+// User map
+void MTP3asp__PT_PROVIDER::user_map(const char *system_port)
+{
+  if (user_map_p == NULL)
+    error("Parameter MTP3ServiceType should be set to TargetM3UA in TARGET_TEST mode!");
+
+  (this->*user_map_p)(system_port);
+}
+//------------
+
+// User unmap
+void MTP3asp__PT_PROVIDER::user_unmap(const char *system_port)
+{
+  (this->*user_unmap_p)(system_port);
+}
+//------------
+
+#ifndef TARGET_TEST
+// User connect
+void MTP3asp__PT_PROVIDER::user_connect()
+{
+  (this->*user_connect_p)();
+}
+//------------
+#endif
+
+//User start
+void MTP3asp__PT_PROVIDER::user_start()
+{ debuglog("user start ordered");
+}
+//------------
+
+//User stop
+void MTP3asp__PT_PROVIDER::user_stop()
+{ debuglog("User stop ordered");
+}
+//------------
+
+//Event Handler
+void MTP3asp__PT_PROVIDER::Handle_Fd_Event(int fd,
+  boolean is_readable, boolean is_writable, boolean is_error)
+{
+  if (MTPServiceType == TargetM3UA )
+  {
+#ifdef TARGET_TEST
+    //In case of target Abstract Socket handles the received message
+    Handle_Socket_Event(fd, is_readable, is_writable, is_error);
+#endif
+  }
+#ifndef TARGET_TEST
+  else
+  {
+    int result;
+
+    result = MPH_ProcessConnection(myConnection);
+
+    if (result <= 0)
+    {
+      MPH_CloseConnection(myConnection);
+      if (result == 0) log("Connection closed by peer.");
+      else log("Error in incoming message.");
+    }
+  }
+#endif
+}
+
+void MTP3asp__PT_PROVIDER::Handle_Timeout(double time_since_last_call)
+{
+#ifdef TARGET_TEST
+  Handle_Timeout_Event(time_since_last_call);
+#endif
+}
+//------------
+
+//Outgoing send
+void MTP3asp__PT_PROVIDER::outgoing_send(const ASP__MTP3__TRANSFERreq& send_par)
+{
+  MTP3__Field__sio sio_field = send_par.sio();
+#ifndef TARGET_TEST
+  int si=bit2int(sio_field.si());
+#endif
+
+  OCTETSTRING sio_oct = bit2oct(sio_field.ni()+sio_field.prio()+sio_field.si());
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+
+  //Message sending by testing on Target
+  if (MTPServiceType == TargetM3UA)
+  {
+#ifdef TARGET_TEST
+    OCTETSTRING tcpData = int2oct(1,1); //Message type
+    tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length
+    tcpData = tcpData + sio_oct;
+    tcpData = tcpData + int2oct(send_par.opc(),4);
+    tcpData = tcpData + int2oct(send_par.dpc(),4);
+    tcpData = tcpData + int2oct(send_par.sls(),1);
+    tcpData = tcpData + send_par.data();
+    send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+    TTCN_Logger::log_event_str("Transfer Req message sent: ");
+    tcpData.log();
+    TTCN_Logger::end_event();
+#endif
+    return;
+  }
+  //Message sending by testing on Target
+  if (MTPServiceType == TargetSTC)
+  {
+#ifdef TARGET_TEST
+    OCTETSTRING tcpData = int2oct(1,1); //Message type
+    tcpData = tcpData + int2oct(send_par.data().lengthof()+15,4); //Length
+    tcpData = tcpData + int2oct(0,1);
+    tcpData = tcpData + int2oct(0,4);
+    tcpData = tcpData + int2oct(0,4);
+    tcpData = tcpData + int2oct(0,1);
+    tcpData = tcpData + send_par.data();
+    send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+    TTCN_Logger::log_event_str("Transfer Req (STC) message sent: ");
+    tcpData.log();
+    TTCN_Logger::end_event();
+#endif
+    return;
+  }
+#ifndef TARGET_TEST
+  if (dynamicConnection &&(!connectionUp))
+  {
+    warn("Connection was not activated via function f_M3UA_SEA_connect.");
+    return;
+  }
+
+  unsigned int offset;
+  int MSU_length = send_par.data().lengthof();
+  int M3UA_par_length;
+  int length;
+  int labellen; // sio+routinglabel length
+
+  switch ( MTPServiceType)
+  {
+    case STC:
+      length = MSU_length;
+      memcpy(buffer, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3iup:
+      if(si==4)
+      {
+        offset = 0;
+        labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte)
+        length = MSU_length+labellen;
+        buffer[0] = *((const unsigned char*)sio_oct);
+        SetPointCodesIUP(send_par.sls(), send_par.opc(), send_par.dpc(),
+           buffer + offset + 1);
+        memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      }
+      else
+      {
+        offset = 0;
+        labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+        length = MSU_length + labellen; //SIF+SIO ;
+        //append MTP3 MSU
+        buffer[offset] = *((const unsigned char*)sio_oct);
+        SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+           buffer + offset + 1);
+        memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      }
+      break;
+    case MTP3itu:
+      offset = 0;
+      labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3ansi:
+      offset = 0;
+      labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3ttc:
+      offset = 0;
+      //if (mtp3_ni==0){ labellen=5;}
+      //else {
+      labellen=6;
+      //} //TTC: sio(1byte) +routing label(6byte) see  ...
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3bttc:
+      offset = 0;
+      buffer[offset] = *((const unsigned char*)bttc_oct);
+      offset += 1;
+      labellen=7; //routing label(7byte)
+      length = 1 + MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen, send_par.data(), send_par.data().lengthof());
+      break;
+    case MTP3mpt:
+      offset = 0;
+      if (mtp3_ni==2)
+      { labellen=8;} //MPT national: sio(1byte) +routing label(7byte)
+      else
+      { labellen=5;} //MPT international: sio(1byte) +routing label(4byte)
+      length = MSU_length + labellen; //SIF+SIO ;
+      //append MTP3 MSU
+      buffer[offset] = *((const unsigned char*)sio_oct);
+      SetPointCodes(send_par.sls(), send_par.opc(), send_par.dpc(),
+         buffer + offset + 1);
+      memcpy(buffer + offset + labellen,
+             send_par.data(), send_par.data().lengthof());
+      break;
+    case M3UA :
+      TTCN_Logger::begin_event(TTCN_DEBUG);
+      TTCN_Logger::log_event("MTP3 test port debug: Message to be encoded is: {");
+      send_par.data().log();
+      TTCN_Logger::log_event(" ");
+      if( M3UAState != AssocActive )
+      {
+        TTCN_Logger::log_event(" M3UAState is not ready to send data. Its state code: %d",AssocActive);
+        TTCN_Logger::log_event("}");
+        TTCN_Logger::end_event();
+        return;
+      }
+      //calculating lengths
+      M3UA_par_length = MSU_length + 16; // ProtocolData parameter
+                 // header length=16 <== see f
+      TTCN_Logger::log_event(", Adjusted M3UA_par_length to %d to support 16 octets M3UA param header",M3UA_par_length);
+      length = 8 + M3UA_par_length; //msg length = header+par
+      TTCN_Logger::log_event(", M3UA MSU_length is %d ==> there should be %d padding octets", MSU_length, 4-(MSU_length%4));
+      if (MSU_length%4) { //should be padded to be multiple of 4 octets
+        length += 4 - (MSU_length%4); //padding shall be counted in msg
+              //length, but not in par_length
+      }
+      TTCN_Logger::log_event(", Set msg length (which includes 8 octets M3UA hdr) to %d ",length);
+
+      //filling the first part of the buffer
+      //common msg hdr ======================================
+      buffer[0] = M3UA_version;
+      buffer[1] = 0x00; //spare
+      buffer[2] = M3UA_MSG_CLS_TRNSFM; // msg class
+      buffer[3] = M3UA_MSG_TYP_TRSNFM_DATA; // msg type
+      encode_32b_int(buffer+4, length); //msg length, 4 bytes
+      //ProtocolData parameter header=========================
+      //tag
+      buffer[M3UA_MSG_OFFS] = PAR_PREFIX_M3UA; //par. tag 1st octet
+      buffer[M3UA_MSG_OFFS+1] = PAR_PROT_DATA; // par tag 2nd octet
+      //length, NOTE: should not contain the padding bytes!
+      encode_16b_int(buffer+M3UA_MSG_OFFS+2,M3UA_par_length);
+      //OPC,DPC
+      encode_32b_int(buffer+M3UA_MSG_OFFS+4,send_par.opc());
+      encode_32b_int(buffer+M3UA_MSG_OFFS+8,send_par.dpc());
+      //SI, NI, MP, SLS
+      buffer[M3UA_MSG_OFFS+12] = bit2int(sio_field.si()); // SI LSb aligned
+      buffer[M3UA_MSG_OFFS+13] = bit2int(sio_field.ni()); // NI LSb aligned
+      buffer[M3UA_MSG_OFFS+14] = bit2int(sio_field.prio()); //MP LSb
+                //aligned
+      buffer[M3UA_MSG_OFFS+15] = 0xFF & send_par.sls(); //SLS
+      // finally the MTP3 MSU itself....
+      offset =  M3UA_MSG_OFFS + 16;
+      TTCN_Logger::log_event(", buffer offset is now set to %d", offset);
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      //append MTP3 MSU
+      memcpy(buffer + offset, send_par.data(), send_par.data().lengthof());
+
+      //padding
+      for (int ii = 0; ii< (MSU_length%4); ++ii) buffer[offset+MSU_length+ii]= 0x00;
+      break;
+    default:
+      error("Invalid MTP3ServiceType setting!");
+  }
+  if (TTCN_Logger::log_this_event(TTCN_DEBUG))
+  {
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("The encoded buffer is: {");
+    OCTETSTRING(length, buffer).log();
+    TTCN_Logger::log_event("}");
+    TTCN_Logger::end_event();
+  }
+  send_msg(buffer, length);
+#endif
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::log(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::warn(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_WARNING);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::debuglog(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::error(const char *msg, ...)
+{
+  TTCN_Logger::begin_event(TTCN_ERROR);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  va_list ap;
+  va_start(ap, msg);
+  TTCN_Logger::log_event_va_list(msg, ap);
+  va_end(ap);
+  TTCN_Logger::end_event();
+  TTCN_error("Fatal error in MTP3 Test Port %s.", get_name());
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::close_log_event()
+{
+  TTCN_Logger::log_event("}");
+  TTCN_Logger::end_event();
+}
+//------------
+
+
+#ifndef TARGET_TEST
+// --------------------------------------------
+// Functions and definitions for test with SEA
+// --------------------------------------------
+
+// Functions of MPH toolkit
+// ---------------------------
+void connectCallback(CONNECTION* con, int channel, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel succeeded "
+        "(channel number is %u)", channel);
+  ((MTP3asp__PT_PROVIDER *)clientData)->set_channel(channel);
+  if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection)
+    ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 1;
+}
+
+void messageCallback(CONNECTION* con, int channel, int length,
+                     unsigned char *msg, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Incoming message from channel: %d",channel);
+  ((MTP3asp__PT_PROVIDER *)clientData)->doInterpret(msg,length,channel,con);
+}
+
+void closeCallback(CONNECTION* con, int channel, void *clientData)
+{
+  ((MTP3asp__PT_PROVIDER *)clientData)->log("Closed channel: %d", channel);
+}
+
+void errorCallback(CONNECTION* con, char *name, char *errorMessage,
+                   void *clientData)
+{
+  if(((MTP3asp__PT_PROVIDER *)clientData)->dynamicConnection)
+  {
+    ((MTP3asp__PT_PROVIDER *)clientData)->log("Opening channel %s failed: %s", name, errorMessage);
+    ((MTP3asp__PT_PROVIDER *)clientData)->conn_state = 2;
+  }
+  else
+    ((MTP3asp__PT_PROVIDER *)clientData)->error("Opening channel %s failed: %s",
+        name, errorMessage);
+}
+//------------
+
+//MTP3_open_channel
+void MTP3asp__PT_PROVIDER::MTP3_open_channel(boolean http)
+{
+  int result;
+  int Mphport;
+  char *perrorString;
+  if( Loop == MTP3_ON )
+  {
+    MTP_fd=-1;
+    myConnection = NULL;
+    log("MTP3_open_channel finished for LOOP");
+    return;
+  }
+
+  if(http)
+  {
+    Mphport = MPH_GetMphPort(hostname,httpport,&perrorString);
+  }
+  else
+  {
+    Mphport = httpport;
+  }
+    
+  if (Mphport == -1)
+    error("GetMphPort failed: %s", *perrorString);
+
+  result = MPH_StringToIid(iid_string, &iid);
+  if (result == -1)
+    error("Converting %s to MPH_IID failed.", iid_string);
+
+  myConnection = MPH_OpenConnection(hostname, Mphport);
+  if (myConnection == NULL)
+    error("Opening connection to %s:%d failed.", hostname, Mphport);
+
+  MPH_OpenChannel(myConnection,
+                  entityname,
+                  &iid,
+                  connectCallback,
+                  messageCallback,
+                  closeCallback,
+                  errorCallback,
+                  this);
+
+  MTP_fd = MPH_GetConnectionFd(myConnection);
+  if (MTP_fd != -1)
+    Handler_Add_Fd_Read(MTP_fd);
+  else
+    error("Incorrect file descriptor: %d.", MTP_fd);
+}
+//------------
+
+// MTP3_close_connection
+void MTP3asp__PT_PROVIDER::MTP3_close_connection()
+{
+  MPH_CloseConnection(myConnection);
+  Handler_Remove_Fd_Read(MTP_fd);
+  close( MTP_fd );
+  //Uninstall_Handler(); // Unnecessary if only socket MTP_fd is in use
+}
+//------------
+
+// wait_for_open
+boolean MTP3asp__PT_PROVIDER::wait_for_open()
+{
+  conn_state = 0;
+  while(conn_state==0)
+  {
+    pollfd pollFd = { MTP_fd, POLLIN, 0 };
+    int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+    if (nEvents == 0) {
+      log("MPH channel opening time out");
+      return FALSE;
+    }
+    if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0) {
+      log("MPH channel opening error (%d)", (nEvents < 0) ? errno : 0);
+      return FALSE;
+    }
+    Handle_Fd_Event(MTP_fd, TRUE, FALSE, FALSE);
+  }
+  if(conn_state == 1) //connectCallback received
+  {
+    conn_state = 0;
+    return TRUE;
+  }
+  else //errorCallback received
+  {
+    conn_state = 0;
+    return FALSE;
+  }
+}
+//------------
+
+//send msg
+void MTP3asp__PT_PROVIDER::send_msg(unsigned char *outbuff, int length)
+{
+  OCTETSTRING buff(length,outbuff);
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3/M3UA Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("outgoing buffer= ");
+  buff.log();
+  TTCN_Logger::log_event("}");
+  TTCN_Logger::end_event();
+  if (Loop == MTP3_ON)
+  {
+    log("Message looped back");
+    doInterpret(outbuff, length, channel, myConnection);
+  } else
+  {
+    MPH_SendMessage(myConnection,channel,length,outbuff);
+    log("Message sent on channel %d", channel);
+  }
+}
+//------------
+
+//Check TestPortVariables
+void  MTP3asp__PT_PROVIDER::Check_TestPort_Variables()
+{
+  if(!dynamicConnection)
+  {
+    if (httpport==-1) error("Parameter HttpPort is not set.");
+    if (hostname==NULL) error("Parameter Hostname is not set.");
+    if (entityname==NULL) error("Parameter EntityName is not set.");
+  }
+  if (Filter==-1) error("Parameter Filter is not set.");
+  if (Loop==-1) error("Parameter Loop is not set.");
+  if (Sut_Pc==-1) error("Parameter SUT_Pc is not set.");
+  if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set.");
+  if (!Ni_is_set) error("Parameter NI is not set.");
+}
+//------------
+
+// -------------------------------------------------
+// STC Functions and definitions for test with SEA
+// -------------------------------------------------
+void  MTP3asp__PT_PROVIDER::Check_TestPort_Variables_STC()
+{
+  if(!dynamicConnection)
+  {
+    if (httpport==-1) error("Parameter HttpPort is not set.");
+    if (hostname==NULL) error("Parameter Hostname is not set.");
+    if (entityname==NULL) error("Parameter EntityName is not set.");
+  }
+}
+//------------
+
+//STC user map
+void MTP3asp__PT_PROVIDER::STC_user_map(const char *system_port)
+{
+  debuglog("Function STC_user_map started");
+  Check_TestPort_Variables_STC();
+  if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  {
+    MTP3_open_channel(TRUE);
+    STC_user_connect();
+  }
+}
+//------------
+
+//STC user connect
+void MTP3asp__PT_PROVIDER::STC_user_connect()
+{
+}
+
+//STC user unmap
+void MTP3asp__PT_PROVIDER::STC_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+//------------
+
+//STC interpreter
+void MTP3asp__PT_PROVIDER::STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  {
+    log("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  {
+    log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  {
+    log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  ASP__MTP3__TRANSFERind recv_msg;
+  MTP3__Field__sio recv_sio;
+  recv_sio.ni()= int2bit(0,2);
+  recv_sio.prio()= int2bit(0,2);
+  recv_sio.si()= int2bit(0,4);
+  recv_msg.sio() = recv_sio;
+  recv_msg.sls() = 0;
+  recv_msg.opc() = 0;
+  recv_msg.dpc() = 0;
+  recv_msg.data() = OCTETSTRING(length, &inbuffer[0]);
+  incoming_message( recv_msg );
+}
+
+// -------------------------------------------------
+// MTP3 Functions and definitions for test with SEA
+// -------------------------------------------------
+
+// SLTM messages for MTP3
+// -----------------------
+unsigned char ttcn_in_sltm[] = {
+  'T','T','C','N','-','3',' ','E','x','e','c','u','t','o','r'};
+
+const int sizeof_ttcn_in_sltm=15;
+
+// ITU:
+unsigned char sltm_msg_itu[] =
+{
+  0x1,  //SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!!
+  0x0,  0x0, 0x0,  0x0, //4 bytes for label (dpc, opc,sls)
+  0x11, //Heading code ITU, see Q.707/5.4
+  0xF0, //spare+Length of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_itu=7+15;
+
+// ANSI:
+unsigned char sltm_msg_ansi[]=
+{
+  0xB1, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label
+  0x11,  // Heading Code ANSI T1.111.7-2001
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_ansi=10+15;
+
+// TTC:
+unsigned char sltm_msg_ttc_national[]=
+{
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!!
+  0x11,  // Heading Code
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_ttc_national=9+15;
+
+// BTTC:
+unsigned char sltm_msg_bttc_national[]=
+{
+  0x0, // extra octet, ignored
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0, // 6 bytes for label TO BE CONT!!!
+  0x23,  // Heading Code
+  'T', 'T'
+};
+const int sizeof_sltm_msg_bttc_national=1+8+2;
+
+// MPT:
+unsigned char sltm_msg_mpt_national[]=
+{
+  0x81, //SIO
+  0x0,0x0,0x0,0x0,0x0,0x0,0x0, // 7 bytes for label
+  0x11,  // Heading Code
+  0xF0, // SLC(is 0 OK???)+Length in bytes of the following string:
+  'T', 'T', 'C', 'N', '-', '3', ' ', 'E', 'x', 'e', 'c', 'u', 't', 'o', 'r'
+};
+const int sizeof_sltm_msg_mpt_national=10+15;
+//------------
+
+
+// coder functions for MTP3
+// -------------------------
+// unsigned int<-> unsigned char array
+// Integer encode/decode functions that will encode/decode from/to
+// Result: Least Significant Byte first (in lowest address) = LSB = Little Endian
+void MTP3asp__PT_PROVIDER::encode_56bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+  from >>= 8;
+  to[5] = from & 0xFF;
+  from >>= 8;
+  to[6] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_56bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32)|
+         ((ull) from[5] << 40)|
+         ((ull) from[6] << 48);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_48bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+  from >>= 8;
+  to[5] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_48bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32)|
+         ((ull) from[5] << 40);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_40bLSB_int(unsigned char *to, unsigned long long int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[4] = from & 0xFF;
+}
+//------------
+
+unsigned long long int MTP3asp__PT_PROVIDER::decode_40bLSB_int(const unsigned char *from)
+{
+  typedef unsigned long long int ull;
+  return ((ull) from[0]) |
+         ((ull) from[1] <<8)|
+         ((ull) from[2] << 16)|
+         ((ull) from[3] << 24)|
+         ((ull) from[4] << 32);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_32bLSB_int(unsigned char *to, unsigned int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[3] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_32bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8) | (from[2] << 16) | (from[3] << 24);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_24bLSB_int(unsigned char *to, int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_24bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8) | (from[2] << 16);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_16bLSB_int(unsigned char *to, int from)
+{
+  to[0] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_16bLSB_int(const unsigned char *from)
+{
+  return from[0] | (from[1] << 8);
+}
+//------------
+
+//MTP3 user map
+void MTP3asp__PT_PROVIDER::MTP3_user_map(const char *system_port)
+{
+  debuglog("Function MTP3_user_map started");
+  Check_TestPort_Variables();
+   if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  { 
+    MTP3_open_channel(TRUE);
+    MTP3_user_connect();
+  }
+  debuglog("Function MTP3_user_map finished");
+}
+//------------
+
+//MTP3 user connect
+void MTP3asp__PT_PROVIDER::MTP3_user_connect()
+{
+  // Sending out an SLTM message:
+  unsigned char * sltm_msg;
+  unsigned int offset = 0;
+  int sizeof_msg;
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+    case MTP3iup:
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      break;
+    case MTP3ansi:
+      sltm_msg=sltm_msg_ansi;
+      sizeof_msg=sizeof_sltm_ansi;
+      break;
+    case MTP3ttc:
+  /*    if (mtp3_ni == 0){
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      }
+      else {
+  */
+      sltm_msg=sltm_msg_ttc_national;
+      sizeof_msg=sizeof_sltm_msg_ttc_national;
+  //    }
+      break;
+    case MTP3bttc:
+      sltm_msg=sltm_msg_bttc_national;
+      sizeof_msg=sizeof_sltm_msg_bttc_national;
+      offset = 1;
+      break;
+    case MTP3mpt:
+      if (mtp3_ni == 2)
+      {
+        sltm_msg = sltm_msg_mpt_national;
+        sizeof_msg = sizeof_sltm_msg_mpt_national;
+      } else
+      {
+        sltm_msg = sltm_msg_itu;
+        sizeof_msg = sizeof_sltm_msg_itu;
+      }
+      break;
+    default:
+      sltm_msg=sltm_msg_itu;
+      sizeof_msg=sizeof_sltm_msg_itu;
+      break;
+  }
+  stored_bttc_octet = 0;
+  unsigned char sio = ((unsigned char) mtp3_ni) << 6;
+
+  if (Ni_is_set)
+  { sltm_msg[0+offset] = sio | 0x1; }
+  else
+  { sltm_msg[0+offset] = 0x1; };//SIO /'test & maint' see Q.704 /14.2.1 => 0x81 suggested !!!
+
+  SetPointCodes(0, Tester_Pc, Sut_Pc, sltm_msg + 1 +offset); // common for ITU, ANSI and TTC
+  log("MTP3/SLTM message sending...");
+  send_msg(sltm_msg, sizeof_msg);
+}
+//MTP3 user unmap
+void MTP3asp__PT_PROVIDER::MTP3_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+
+//MTP3 interpreter
+void MTP3asp__PT_PROVIDER::MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  {
+    log("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  {
+    log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  {
+    log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  unsigned int offset = 0;
+  if ( MTPServiceType==MTP3bttc )
+  {
+    stored_bttc_octet = inbuffer[0];
+    offset = 1;
+  }
+  int labellen; // sio+routinglabel length
+  int rec_ni = (inbuffer[offset]) >> 6;  //network indicator
+  if (rec_ni != mtp3_ni)
+    error("Received NI is different from sent NI.");
+
+  unsigned char sio = inbuffer[offset];
+  unsigned int si = sio&0x0F;
+
+  if ( MTPServiceType==MTP3itu )
+  { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+  }
+  else if ( MTPServiceType==MTP3iup )
+  { 
+    if(si==4)
+      labellen=6; //ITU-T:sio(1byte) + standard telephony label(5byte)
+    else
+      labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+  }
+  else if (MTPServiceType==MTP3ttc)
+  { labellen=6; //new (2004-03-02): 6= sio(1byte)+ routing label(5bytes)
+  }
+  else if (MTPServiceType==MTP3mpt)
+  {
+     if ( mtp3_ni == 2)
+       {labellen=8;} //MPT national: sio(1byte) +routing label(7byte)
+     else
+       {labellen=5;} //MPT international: sio(1byte) +routing label(4byte)
+  }
+  else if (MTPServiceType==MTP3bttc)
+  { labellen=7; //7= sio(1byte)+ routing label(6bytes)
+  }
+  else
+  { log("incorrect MTPServiceType - programming error-> packet dropped");
+    return;
+  }
+
+  // checking SIO field (first incoming byte) - management or test message
+  switch (si)
+  {
+    case 0: processing_MTP3_management_msg(inbuffer+offset,length-offset);
+      return;
+    case 1:                                                          //MTP3itu
+    case 2: processing_MTP3_test_msg(inbuffer+offset,length-offset); //MTP3ansi
+      return;
+    default:
+      break;
+  }
+
+  // filling up TTCN structure
+  if ((Loop==MTP3_ON) || (!Filter) || (Filter&&Check_PcMatch(Sut_Pc,Tester_Pc,&inbuffer[offset+1])))
+  {
+    ASP__MTP3__TRANSFERind recv_msg;
+    MTP3__Field__sio recv_sio;
+    BITSTRING sio_bit = oct2bit(OCTETSTRING(1,inbuffer+offset));
+    recv_sio.ni()= substr(sio_bit,0,2);
+    recv_sio.prio()= substr(sio_bit,2,2);
+    recv_sio.si()= substr(sio_bit,4,4);
+    recv_msg.sio() = recv_sio;
+    unsigned int sls,opc,dpc;
+    if ( (MTPServiceType==MTP3iup) && (si==4) )
+      GetPointCodesIUP(sls,opc,dpc,&inbuffer[1]);
+    else
+      GetPointCodes(sls,opc,dpc,&inbuffer[offset+1]);
+    recv_msg.sls() = sls;
+    recv_msg.opc() = opc;
+    recv_msg.dpc() = dpc;
+    int len;
+    len= length-labellen-offset; //len= length-labellen;
+    recv_msg.data() = OCTETSTRING(len, &inbuffer[offset+labellen]);
+    incoming_message( recv_msg );
+  }
+  else
+  { log("The rooting label (OPC, DPC) not matched with the filter setting -> packet dropped.");
+    return;
+  }
+}
+
+void MTP3asp__PT_PROVIDER::processing_MTP3_management_msg(unsigned char* inbuff,int len)
+{
+  int outlen=0;
+  int labellen; // sio+routinglabel length
+  int chm_addlen;  // (Changeback) additional length = Heading Code + SLC+ (changeback codes)
+  int mim_addlen;  // (MIM)          -"-
+  unsigned int offset = 0;
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+
+  if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup)
+  { labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    chm_addlen = 2;
+    mim_addlen = 1;
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  { labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T.1.111.4
+    chm_addlen = 3;
+    mim_addlen = 2;
+  }
+  else if (MTPServiceType==MTP3ttc)
+  { //if ( mtp3_ni == 0 ) { labellen=5;} //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    //else {
+    labellen=6;
+    //} //sio(1byte)+ routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704.
+  }
+  else if (MTPServiceType==MTP3mpt)
+  { if ( mtp3_ni == 2 ) { labellen=8; }
+    else { labellen=5; }
+    chm_addlen = 2;
+    mim_addlen = 1;
+  }
+  else if (MTPServiceType==MTP3bttc)
+  { labellen=7;//sio(1byte)+routing label(6bytes) see 3/15517-FAY 112 011/2 or jt-q704
+    offset = 1;
+  }
+  else
+  { log("incorrect MTPServiceType- programming error-> packet dropped");
+    return;
+  }
+
+  if (MTPServiceType==MTP3bttc)
+  {
+    buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front
+    buffer[1]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[2],&inbuff[1],len))
+    { log("incorrect incoming management message -> packet dropped.");
+      return;
+    }
+  }
+  else
+  {
+    buffer[0]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[1],&inbuff[1],len))
+    { log("incorrect incoming management message -> packet dropped.");
+      return;
+    }
+  }
+
+  // Changeover & changeback(CHM) see ITU: Q.704/15.4.1  ANSI: T.1.111.4/15.2-4
+  if (inbuff[labellen]==0x51) //CBD
+  {
+    outlen=labellen+chm_addlen;
+    if (len<outlen)
+    { log("incorrect incoming CHM message -> packet dropped.");
+      return;
+    }
+    else
+    { buffer[offset + labellen]= 0x61; // Heading Code <- CBA
+      memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],len-labellen-1);
+      outlen = len;
+    }
+  }
+  else if (inbuff[labellen]==0x16) //MIM  H0=6=Mgmt inhibit msg, H1=1=LIN
+  {
+    outlen=labellen+mim_addlen;
+    if (len<outlen)
+    { log("incorrect incoming MIM message -> packet dropped.");
+      return;
+    }
+    else
+    {
+      buffer[offset + labellen]= 0x56; // LIN -> LID  ; LID = link inhibit denied
+      memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1)); //SLC+spare+...
+      outlen = len;
+    }
+  }
+  else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup))
+  {
+    if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+    return;
+  }
+
+/*  else if (inbuff[labellen]==0x17 && (MTPServiceType==MTP3iup)) //TRM  H0=7, H1=1 : TRA
+  {
+    outlen=labellen+1;
+    if (len<outlen)
+    { log("incorrect incoming TRA message -> packet dropped.");
+      return;
+    }
+    else
+    {
+      outlen = len;
+    }
+  }*/
+  else
+  { log("This management message type is not supported -> packet dropped.");
+    return;
+  }
+
+  // send message
+  log("function processing_MTP3_management_msg sends a msg");
+  send_msg(buffer, outlen+offset);
+}
+
+// processing MTP3 test msg
+// Signalling link test message handling according to Q.707 (ITU) and T1.111.7-2001 (ANSI)
+void MTP3asp__PT_PROVIDER::processing_MTP3_test_msg(unsigned char* inbuff,int len)
+{
+  int outlen=0;
+  int labellen; // sio+routinglabel length
+  int addlen;   //Heading Code+length indicator
+  //unsigned int ni; //network indicator
+  OCTETSTRING bttc_oct = int2oct(stored_bttc_octet, 1); // additional octet for MTP3bttc
+  unsigned int offset = 0;
+  if ( MTPServiceType==MTP3itu || MTPServiceType==MTP3iup)
+  {
+    labellen=5; //ITU-T:sio(1byte) + routing label(4byte) see /Q.704/15.4.1
+    addlen = 2; //HC(1 byte)+length ind(1 byte) see Q.707/5.8
+  }
+  else if ( MTPServiceType==MTP3ansi )
+  {
+    labellen=8; //ANSI: sio(1byte) +routing label(7byte) see T1.111.4
+    addlen = 2; //HC(1byte) +(length ind+SLC(1byte)) see  T1.111.7-2001/5
+  }
+  else if (MTPServiceType==MTP3ttc)
+  {
+  /*  if (mtp3_ni == 0) {
+        debuglog("processing_MTP3_test_msg/TTC (Japanese) international");
+        labellen=5;  //TTC (Japanese) international
+        addlen=2;
+    } else {
+  */
+        labellen=6; // previously 7
+                    // TTC national [ 56bits=sio(1byte)+routing label ]
+                    // r.label= dpc(2bytes)+opc(2bytes)+sls(4bit)+12bits (?)
+        addlen=2;
+    //}
+  }
+  else if (MTPServiceType==MTP3mpt)
+  {
+    if (mtp3_ni == 2)
+    { labellen=8;  //MPT national
+      addlen=2;
+    }
+    else
+    { labellen=5; // MPT international
+      addlen=2;
+    }
+  }
+  else if (MTPServiceType==MTP3bttc)
+  {
+    labellen=7;
+    addlen=2;
+    offset = 1;
+  }
+  else
+  { log("incorrect MTPServiceType - programming error-> packet dropped");
+    return;
+  }
+
+  if (MTPServiceType==MTP3bttc)
+  {
+    buffer[0]=*((const unsigned char*)bttc_oct); //additional stored octet in front
+    buffer[1]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[2],&inbuff[1],len))
+    {
+      log("incorrect incoming test message -> packet dropped.");
+      return;
+    }
+  }
+  else
+  {
+    buffer[0]=inbuff[0]; //SIO
+    if (!ChangePointCodes(&buffer[1],&inbuff[1],len))
+    {
+      log("incorrect incoming test message -> packet dropped.");
+      return;
+    }
+  }
+
+  // Test message handling: SLTM->SLTA, SRT->SRA, SLTA->TRA, others only logged
+  debuglog("\n==>Test message handling: msg type:%x\n",   inbuff[labellen] ); // temporary
+  switch( inbuff[labellen] )
+  {
+    case 0x11: //SLTM
+      log("MTP3/SLTM message received");
+      outlen=labellen+addlen;
+      if (len<outlen )
+      { log("incorrect incoming MTP3/SLTM message -> packet dropped.");
+        return;
+      }
+      else
+      { buffer[offset + labellen]= 0x21; // SLTA
+        memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1));
+        outlen = len;
+      }
+      break;
+    case 0x21: //SLTA
+      if(!strncmp((const char *)(inbuff+labellen+addlen),(const char *)ttcn_in_sltm,sizeof_ttcn_in_sltm))
+      {
+        log("MTP3/SLTA message received for  SLTM sent by Test Port-> TRA message sent");
+        buffer[offset]--;
+        buffer[offset + labellen]= 0x17; // TRA
+        outlen = labellen+1;
+        return;
+//        if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+      }
+      else
+      {
+        log("MTP3/SLTA message received -> packet dropped");
+        return;
+      }
+      break;
+    case 0x23: // TTC (Japanese) SRT (Signalling Routing Test signal)
+      log("MTP3ttc/SRT message received");
+      outlen=labellen+addlen;
+      if (len<outlen )
+      { log("incorrect incoming MTP3ttc/SRT message (length error)-> packet dropped.");
+        return;
+      }
+      else
+      { buffer[offset + labellen]= 0x84; // TTC (Japanese) SRA
+        memcpy(&buffer[offset + labellen+1],&inbuff[labellen+1],(len-labellen-1));
+        outlen = len;
+      }
+      break;
+    case 0x84: // TTC (Japanese) SRA (Signalling Routing test Ack signal)
+      log("MTP3ttc/SRA message received -> packet dropped");
+      return;
+    default:
+      log("This management message type is not supported -> packet dropped ");
+      return;
+  }
+
+  // send message
+  log("function processing_MTP3_test_msg sends a message");
+  send_msg( buffer,outlen+offset);
+}
+
+// Point Code Manipulation (Get/Set/Change)
+// -------------------------------------------------
+void MTP3asp__PT_PROVIDER::GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg)
+{
+  unsigned int label;
+  sls=0; opc=0; dpc=0;
+  unsigned long long int Label;
+
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+      label= decode_32bLSB_int(msg);
+      sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+      opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+      dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+      debuglog("Function GetPointCodes called for service type MTP3itu");
+      break;
+    case MTP3iup:
+      label= decode_32bLSB_int(msg);
+      sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+      opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+      dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+      debuglog("Function GetPointCodes called for service type MTP3iup");
+      break;
+    case MTP3ansi:
+      Label=decode_56bLSB_int(msg);
+      sls  = (Label >> 48) & 0xFF;    //sls  = (Label&0x00FF000000000000)>>48;
+      opc  = (Label >> 24) & 0xFFFFFF;//opc  = (Label&0x0000FFFFFF000000)>>24;
+      dpc  = Label & 0xFFFFFF;        //dpc  = (Label&0x0000000000FFFFFF);
+      debuglog("Function GetPointCodes called for service type MTP3ansi");
+      break;
+    case MTP3ttc:
+    /*
+      if( mtp3_ni == 0)
+      {
+        label= decode_32bLSB_int(msg);
+        sls  = (label>>28)&0xF;     //sls  = (label&0xF0000000)>>28;
+        opc  = (label>>14)&0x3FFF;  //opc  = (label&0x0FFFC000)>>14;
+        dpc  = label&0x3FFF;
+        debuglog("Function GetPointCodes called for service type MTP3ttc/international");
+      } else
+      {*/
+      Label=decode_48bLSB_int(msg);            //0x010203040506
+      sls  = (Label>>32)&0xF;   // sls  = (Label&0x000F00000000)>>32; // only 4 bits!!!
+      opc  = (Label>>16)&0xFFFF;//opc  = (Label&0x0000FFFF0000)>>16;
+      dpc  = Label&0xFFFF;      //dpc  = (Label&0x00000000FFFF);
+      debuglog("Function GetPointCodes called for service type MTP3ttc/national");
+      //}
+      break;
+    case MTP3bttc:
+      Label=decode_48bLSB_int(msg);
+      sls  = (Label>>32)&0xF;   // sls  = (Label&0x000F00000000)>>32; // only 4 bits!!!
+      opc  = (Label>>16)&0xFFFF;//opc  = (Label&0x0000FFFF0000)>>16;
+      dpc  = Label&0xFFFF;      //dpc  = (Label&0x00000000FFFF);
+      debuglog("Function GetPointCodes called for service type MTP3bttc/national");
+      break;
+    case MTP3mpt:
+      if( mtp3_ni == 2)
+      {
+        Label=decode_56bLSB_int(msg);
+        sls  = (Label >> 48) & 0xFF;    //sls  = (Label&0x00FF000000000000)>>48;
+        opc  = (Label >> 24) & 0xFFFFFF;//opc  = (Label&0x0000FFFFFF000000)>>24;
+        dpc  = Label & 0xFFFFFF;        //dpc  = (Label&0x0000000000FFFFFF);
+        debuglog("Function GetPointCodes called for service type MTP3mpt(nat)");
+      }
+      else
+      {
+        label= decode_32bLSB_int(msg);
+        sls  = (label>>28)&0xF;    //sls  = (label&0xF0000000)>>28;
+        opc  = (label>>14)&0x3FFF; //opc  = (label&0x0FFFC000)>>14;
+        dpc  = label&0x3FFF;       //dpc  = (label&0x00003FFF);
+        debuglog("Function GetPointCodes called for service type MTP3mpt(int)");
+      }
+      break;
+    default:
+      break;
+  }
+  debuglog("sls:%u opc:%u, dpc:%u",sls,opc,dpc);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg)
+{
+  debuglog("Function GetPointCodesIUP called");
+  cic=0; opc=0; dpc=0;
+  unsigned long long int Label;
+  Label=decode_40bLSB_int(msg);            //0x0102030405
+  cic  = (Label>>28)&0xFFF;  //cic  = (label&0xFFF0000000)>>28;
+  opc  = (Label>>14)&0x3FFF; //opc  = (label&0x000FFFC000)>>14;
+  dpc  = Label&0x3FFF;       //dpc  = (label&0x0000003FFF);
+  debuglog("cic:%u opc:%u, dpc:%u",cic,opc,dpc);
+}
+
+void MTP3asp__PT_PROVIDER::SetPointCodes(unsigned int sls,unsigned int opc,unsigned int dpc, unsigned char* msg)
+{
+  unsigned long long int Sls,Opc,Dpc;
+
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+      encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+      debuglog("Function SetPointCodes called for service type MTP3itu");
+      break;
+    case MTP3iup:
+      encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+      debuglog("Function SetPointCodes called for service type MTP3iup");
+      break;
+    case MTP3ansi:
+      Sls=sls; Opc=opc; Dpc=dpc;
+      encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc));
+      debuglog("Function SetPointCodes called for service type MTP3ansi");
+      break;
+    case MTP3ttc:
+     /* if ( mtp3_ni == 0 ){
+        encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+        debuglog("Function SetPointCodes called for service type MTP3ttc/international");
+      } else {
+     */
+        Sls=sls; Opc=opc; Dpc=dpc;
+        encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3ttc/national");
+      //}
+      break;
+    case MTP3bttc:
+        Sls=sls; Opc=opc; Dpc=dpc;
+        encode_48bLSB_int( msg, ((Sls<<32)|(Opc<<16)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3bttc/national");
+      break;
+    case MTP3mpt:
+      if ( mtp3_ni == 2 )
+      { Sls=sls; Opc=opc; Dpc=dpc;
+        encode_56bLSB_int( msg, ((Sls<<48)|(Opc<<24)|Dpc));
+        debuglog("Function SetPointCodes called for service type MTP3mpt(nat)");
+      }
+      else
+      { encode_32bLSB_int( msg, ((sls<<28)|(opc<<14)|dpc ));
+        debuglog("Function SetPointCodes called for service type MTP3mpt(int)");
+      }
+      break;
+    default:
+      break;
+  }
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::SetPointCodesIUP(unsigned int cic,unsigned int opc,unsigned int dpc, unsigned char* msg)
+{
+  unsigned long long int Cic,Opc,Dpc;
+  Cic=cic; Opc=opc; Dpc=dpc;
+  debuglog("Function SetPointCodesIUP called");
+  encode_40bLSB_int( msg, ((Cic<<28)|(Opc<<14)|Dpc ));
+}
+
+//Changes the Point  codes: dpc<->opc ie. destination <->orig
+// inbuff starts from dpc i.e doesn't contain sio !!!!
+int MTP3asp__PT_PROVIDER::ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len)
+{
+  switch( MTPServiceType)
+  {
+    case MTP3itu:
+    case MTP3iup:
+      if (len<5)
+      { warn("MTP3itu:len<5. Too short message!"); return 0; };
+      break;
+    case MTP3ansi:
+      if (len<9 ) return 0;
+      break;
+    case MTP3ttc:
+      //if ( mtp3_ni == 0 && len<5)
+      //{ warn("MTP3ttc:len<5. Too short message!"); return 0; }
+      //else
+      if (len<6)
+      { warn("MTP3ttc:len<6. Too short message!"); return 0; }
+      break;
+    case MTP3bttc:
+      if (len<7)
+      { warn("MTP3bttc:len<7. Too short message!"); return 0; }
+      break;
+    case MTP3mpt:
+      if ( mtp3_ni == 2 && len<8)
+      { warn("MTP3mpt:len<8. Too short message!"); return 0; }
+      else if (len<5)
+      { warn("MTP3mpt:len<5. Too short message!"); return 0; }
+      break;
+    default:
+      warn("Unknown MTPServiceType!!!");
+      break;
+  }
+  unsigned int sls,opc,dpc;
+  GetPointCodes(sls,opc,dpc,inbuff);
+  SetPointCodes(sls,dpc,opc,outbuff);
+  return 1;
+}
+//------------
+
+int  MTP3asp__PT_PROVIDER::Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff)
+{
+  unsigned int temp_opc,temp_dpc,temp_sls;
+
+  GetPointCodes(temp_sls,temp_opc,temp_dpc,buff);
+  if ( (temp_opc == opc) && (temp_dpc == dpc) ) return 1;
+  return 0;
+}
+//------------
+
+
+// -------------------------------------------------
+// M3UA Functions and definitions for test with SEA
+// -------------------------------------------------
+
+// Structures for M3UA
+static unsigned char aspup_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM
+  M3UA_MSG_TYP_ASPSM_ASPUP, //Msg type: ASPUP
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+  //      ,PAR_PREFIX_COMMON, //optional Info string tag, in included, then msg
+  //       PAR_INFO_STR            //msg length should be +20, that is 28=0x1c
+  //       0x00,0x0f, // length: "TTCN-3 Executor"  is 15 chars
+  //       'T', 'T', 'C', 'N',
+  //       '-', '3', ' ', 'E',
+  //       'x', 'e', 'c', 'u',
+  //       't', 'o', 'r', 0x00 //las octet is padding
+};
+const int sizeof_aspup_msg = 8;
+
+static unsigned char aspupack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class: ASPSM
+  M3UA_MSG_TYP_ASPSM_ASPUPAck, //Msg type: ASPUP
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspupack_msg = 8;
+
+static unsigned char aspac_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPAC, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspac_msg = 8;
+
+// ASP Active Acknowledge msg:
+static unsigned char aspac_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPACAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspac_ack_msg = 8;
+
+static unsigned char aspia_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPTM, //Msg class
+  M3UA_MSG_TYP_ASPTM_ASPIAAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspia_ack_msg = 8;
+
+// ASP DOWN Acknowledge msg:
+static unsigned char aspdn_ack_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_ASPSM, //Msg class
+  M3UA_MSG_TYP_ASPSM_ASPDNAck, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x08  // length ends = 8 octets
+};
+const int sizeof_aspdn_ack_msg = 8;
+
+//ASP Destination Available msg:
+static unsigned char dava_1apc_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  //or updated doc 2/1056-FCPW 101 86/P-1
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_SSNM, //Msg class
+  M3UA_MSG_TYP_SSNM_DAVA, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x10,  // length ends, 16 octets
+  //Affected point code
+  PAR_PREFIX_COMMON,
+  PAR_AFFECTED_PC,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // point code placeholder begins
+  0x00, //
+  0x00, //
+  0x00 // point code placeholder ends
+};
+const int sizeof_dava_1apc_msg = 16;
+
+static unsigned char duna_1apc_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_SSNM, //Msg class
+  M3UA_MSG_TYP_SSNM_DUNA, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x10,  // length ends, 16 octets
+  //Affected point code
+  PAR_PREFIX_COMMON,
+  PAR_AFFECTED_PC,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // point code placeholder begins
+  0x00, //
+  0x00, //
+  0x00 // point code placeholder ends
+};
+const int sizeof_duna_1apc_msg = 16;
+
+static unsigned char error_msg[] =
+{
+  //common MsUA msg hdr, see M3UA PS
+  //Doc no. 1/1056-FCP 103 3571/F Uen, RevA
+  0x01, //Release Version: 01
+  0x00, //reserved
+  M3UA_MSG_CLS_MGMT, //Msg class
+  M3UA_MSG_TYP_MGMT_ERR, //Msg type
+  0x00, //Msg length  begins (4 octets)
+  0x00, //
+  0x00, //
+  0x18,  // length ends, 16+8 octets
+  // Error code field:
+  PAR_PREFIX_COMMON,
+  PAR_ERROR_CODE,
+  0x00, //par length begins (2 octets)
+  0x08, //length ends, 8 octets
+  0x00, // error code placeholder begins (M3UA_MSG_OFFS+4)
+  0x00, //
+  0x00, //
+  0x00, // error code placeholder ends
+  // additional field:
+  0x00, // M3UA_MSG_OFFS+8
+  0x00, // Routing context or Network Appearanance or APC or DI = error_code_id
+  0x00, // par length begins (2 octets)
+  0x08, // length ends, 8 octets
+  0x00, // value placeholder begins M3UA_MSG_OFFS+12
+  0x00, //
+  0x00, //
+  0x00 // value place holder ends
+};
+const int sizeof_error_msg = 24;
+
+void MTP3asp__PT_PROVIDER::M3UA_user_unmap(const char *system_port)
+{
+  MTP3_close_connection();
+  dynamicConnection = FALSE;
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::M3UA_user_map(const char *system_port)
+{
+  M3UAState = AssocDown;
+  Check_TestPort_Variables();
+  if(dynamicConnection)
+  {
+    connectionUp = FALSE;
+  }
+  else
+  {
+    MTP3_open_channel(TRUE);
+    M3UA_user_connect();
+  }
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::M3UA_user_connect()
+{
+    M3UAState = AssocEstabl;
+    // Sending out an ASPUP message
+    log("Message ASPUP will be sent");
+    send_msg(aspup_msg, sizeof_aspup_msg);
+    // NOTE: the ASPUPAck will be handled by M3UA_interpreter, which
+    // also will take care of sending ASPAC upon receiving the ASPUPAck
+}
+//------------
+
+// M3UA_interpreter
+void MTP3asp__PT_PROVIDER::M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+{
+  if ((length==0) || (inbuffer==NULL))
+  { warn("0 byte long message received -> packet dropped.");
+    return;
+  }
+
+  if (length==1)
+  {
+    log("1 byte long internal SEA message received -> packet dropped.");
+    return;
+  }
+
+  if ( !strcmp((const char*)inbuffer,"start") )
+  { log("start message received from SEA");
+    return;
+  }
+  else if (!strcmp((const char*)inbuffer,"stop"))
+  { log("stop message received from SEA");
+    return;
+  }
+
+  // writing out the contents of the buffer
+  OCTETSTRING buff(length,inbuffer);
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("incoming buffer: ");
+  buff.log();
+  TTCN_Logger::end_event();
+
+  // version checking
+  if (  inbuffer[M3UA_VER_OFFS]  != M3UA_version )
+  { warn("Incompatible M3UA protocol version in header -> packet dropped");
+    return;
+  }
+
+  //length checking
+  unsigned int indicated_length = decode_32b_int(inbuffer + M3UA_LGT_OFFS );
+  if ( indicated_length  != (unsigned)length)
+    warn("Length in common header (%d) mismatches received  buffer length (%d),"
+         "Assuming that it is because of the omission of final parameter padding"
+         "in indicated length",indicated_length, length);
+
+  // checking MSG class
+  int unprocessed_chars = 0;
+  switch (inbuffer[M3UA_CLS_OFFS])
+  {
+    case M3UA_MSG_CLS_MGMT:
+      unprocessed_chars =  processing_M3UA_MGMT_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_TRNSFM :
+      unprocessed_chars =  processing_M3UA_Transfer_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_SSNM :
+      unprocessed_chars = processing_M3UA_SSNM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_ASPSM :
+      unprocessed_chars = processing_M3UA_ASPSM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_ASPTM :
+      unprocessed_chars = processing_M3UA_ASPTM_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_CLS_RKM :
+      unprocessed_chars = processing_M3UA_RKM_msg(inbuffer, length);
+      break;
+    default:
+      unprocessed_chars = processing_M3UA_unsupported_msg_class(inbuffer, length);
+      break;
+  }
+  debuglog("%d chars remained unprocessed (might be due to padding)",  unprocessed_chars);
+}
+//------------
+
+//processing M3UA MGMT msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_MGMT_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_MGMT_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: Mgmt, ");
+  switch (inbuffer[M3UA_TYP_OFFS])//msg type
+  {
+    case M3UA_MSG_TYP_MGMT_ERR:
+      TTCN_Logger::log_event("type: ERROR-> ignored");
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+    case M3UA_MSG_TYP_MGMT_NTFY:
+      TTCN_Logger::log_event("type: NOTIFY -> ignored");
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+    default:
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class MGMT -> packet dropped.", inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("}");
+      TTCN_Logger::end_event();
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA SSNM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_SSNM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_SSNM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: SSNM, ");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_SSNM_DAUD:
+      while (offset <= length-8 ) //processing potential params
+      {
+        switch (inbuffer[offset++]) //1st octet of tag
+        {
+        case PAR_PREFIX_COMMON:
+          TTCN_Logger::log_event (" DAUD: COMMON parameter ");
+          switch (inbuffer[offset++]) //2nd octet of COMMON tag
+          {
+            case PAR_ROUTING_CTX:
+              TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            case PAR_INFO_STR:
+              TTCN_Logger::log_event ("Info String (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            case PAR_AFFECTED_PC:
+              TTCN_Logger::log_event ("Affected Point Code  -> will send DUNA/DAVA, ");
+              TTCN_Logger::log_event("will ignore remainder parameters after APC}");
+              TTCN_Logger::end_event();
+              Send_DAVA_DUNA_to_APCinDAUD(Tester_Pc, inbuffer, offset);
+              return length-offset;
+            default:
+              TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x-> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]);
+              send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]);
+              skip_par_after_tag(inbuffer, offset);
+              break;
+          }
+          break;
+        case PAR_PREFIX_M3UA:
+          TTCN_Logger::log_event ("DAUD: M3UA parameter: ");
+          switch (inbuffer[offset++]) //2nd octet of M3UA tag
+          {
+            case PAR_NETW_APP:
+              TTCN_Logger::log_event ("Network Appearance (unsupported par) -> skipped), ");
+              skip_par_after_tag(inbuffer, offset);
+              break;
+            default:
+              TTCN_Logger::log_event ("invalid M3UA  param tag:0x%02x%02x-> skipped",
+              PAR_PREFIX_M3UA, inbuffer[offset-1]);
+              send_M3UA_error_msg( PAR_ERRC_PARFE, inbuffer[offset-1]);
+              skip_par_after_tag(inbuffer, offset);
+          }
+          break;
+        default: //1st octet of tag
+          TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]);
+          close_log_event();
+          return length -offset;
+        break;
+        }
+      }
+      break;
+    case M3UA_MSG_TYP_SSNM_DAVA: // Destination Available // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DAVA -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DUNA: // Destination Unavailable // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DUNA -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_SCON: // Signalling Congestion  // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_SCON -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DUPU: //Destinationn User Part Unavailable // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DUPU -> ignored");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_SSNM_DRST: //Destination Restricted   // Notification to the user part ?????
+      TTCN_Logger::log_event("type: SSNM_DRST -> ignored");
+      close_log_event();
+      break;
+    default: //msg type
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      TTCN_Logger::log_event("Unsupported M3UA msg type -> packet dropped.");
+      close_log_event();
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA ASPSM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_ASPSM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_ASPSM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: ASPSM, ");
+
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_ASPSM_ASPUP:
+      TTCN_Logger::log_event("type: ASPSM_ASPUP -> ASPUPAck will be sent");
+      close_log_event();
+      send_msg(aspupack_msg, sizeof_aspupack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPDN:
+      TTCN_Logger::log_event("type: ASPSM_ASPDN -> ASPDNAck will be sent");
+      close_log_event();
+      send_msg(aspdn_ack_msg, sizeof_aspdn_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPSM_BEAT:
+      TTCN_Logger::log_event("type: ASPSM_BEAT -> ASPSM_BEATAck will be sent");
+      close_log_event();
+      //Sending back the packet as acknowledge:
+      inbuffer[M3UA_TYP_OFFS]= M3UA_MSG_TYP_ASPSM_BEATAck;
+      send_msg(inbuffer, length);
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPUPAck:
+      TTCN_Logger::log_event("type: ASPSM_ASPUPAck -> ASPAC will be sent");
+      M3UAState = AssocInac;
+      TTCN_Logger::log_event(" M3UAState's been changed to AssocInac");
+      close_log_event();
+      send_msg(aspac_msg, sizeof_aspac_msg );
+      break;
+    case M3UA_MSG_TYP_ASPSM_ASPDNAck:
+      M3UAState = AssocDown;
+      TTCN_Logger::log_event(" M3UAState's been changed to AssocDown");
+      TTCN_Logger::log_event("type: ASPSM_ASPDNAck ->  nothing will be sent");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_ASPSM_BEATAck:
+      TTCN_Logger::log_event("type: ASPSM_BEATAck ->  nothing will be sent");
+      close_log_event();
+      break;
+    default:
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA ASPTM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_ASPTM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_ASPTM_msg");
+  TTCN_Logger::begin_event(TTCN_PORTEVENT);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: ASPTM, ");
+
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  switch (inbuffer[M3UA_TYP_OFFS])
+  {
+    case M3UA_MSG_TYP_ASPTM_ASPAC: //ASP Active
+      M3UAState = AssocActive;
+      TTCN_Logger::log_event("type: ASPTM_ASPAC -> ASPACAck will be sent");
+      close_log_event();
+      send_msg(aspac_ack_msg, sizeof_aspac_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPIA:  //ASP InActive
+      TTCN_Logger::log_event("type: ASPTM_ASPIA -> ASPIAAck will be sent");
+      close_log_event();
+      send_msg(aspia_ack_msg, sizeof_aspia_ack_msg);
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPACAck:
+      M3UAState = AssocActive;
+      TTCN_Logger::log_event("type: ASPTM_ASPACAck -> nothing will be sent");
+      TTCN_Logger::log_event("M3UAState's been changed to AssocActive.");
+      close_log_event();
+      break;
+    case M3UA_MSG_TYP_ASPTM_ASPIAAck:
+      TTCN_Logger::log_event("type: ASPTM_ASPIAAck -> nothing will be sent");
+      close_log_event();
+      break;
+    default:
+      TTCN_Logger::log_event("Unsupported M3UA msg type %x of class ASPSM-> packet dropped.", (unsigned char)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+  return length - offset;
+}
+//------------
+
+//processing M3UA RKM msg
+int MTP3asp__PT_PROVIDER::processing_M3UA_RKM_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_RKM_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  warn("Unsupported M3UA msg class M3UA_RKM -> packet dropped.");
+  return length - offset;
+}
+//------------
+
+//processing M3UA unsupported msg class
+int MTP3asp__PT_PROVIDER::processing_M3UA_unsupported_msg_class(unsigned char* inbuffer,int length)
+{
+  warn("Unsupported M3UA msg class -> packet dropped.");
+  send_M3UA_error_msg( PAR_ERRC_UNSMC, inbuffer[M3UA_CLS_OFFS] );
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  return length - offset;
+}
+//------------
+
+// processing_M3UA_Transfer_msg  -  called if the msg class is "Transfer" i.e M3UA_MSG_CLS_TRNSFM:
+int MTP3asp__PT_PROVIDER::processing_M3UA_Transfer_msg(unsigned char* inbuffer,int length)
+{
+  debuglog("Entering function:processing_M3UA_Transfer_msg");
+  int offset = M3UA_MSG_OFFS; //pointer for processing
+  unsigned int recv_opc, recv_dpc,recv_si, recv_ni, recv_mp,recv_sls =0;
+  int param_length = 0;
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): {", get_name());
+  TTCN_Logger::log_event("decoded msg class: DataTrnsf, ");
+
+  switch (inbuffer[M3UA_TYP_OFFS]) //msg type
+  {
+    case M3UA_MSG_TYP_TRSNFM_DATA:
+      TTCN_Logger::log_event("msg type DATA, ");
+      while (offset <= length-8) //processing potential params
+      {
+        switch (inbuffer[offset++]) //1st octet of tag. Offset already incremented after the 'case' !
+        {
+          case PAR_PREFIX_COMMON:
+            TTCN_Logger::log_event (" DATA: COMMON parameter, ");
+            switch (inbuffer[offset++]) //2nd octet of tag
+            {
+              case PAR_ROUTING_CTX:
+                TTCN_Logger::log_event ("Routing Context (unsupported par) -> skipped), ");
+                //  Send back an error msg
+                skip_par_after_tag(inbuffer, offset);
+                break;
+              case PAR_CORREL_ID:
+                TTCN_Logger::log_event ("Correlation ID (unsupported par) -> skipped), ");
+                skip_par_after_tag(inbuffer, offset);
+                break;
+              default:
+                TTCN_Logger::log_event ("invalid COMMON param tag:0x%02x%02x -> skipped", PAR_PREFIX_COMMON, inbuffer[offset-1]);
+                skip_par_after_tag(inbuffer, offset);
+                break;
+            }
+          case PAR_PREFIX_M3UA:
+            TTCN_Logger::log_event ("DATA: M3UA parameter: ");
+            switch (inbuffer[offset++]) //2nd octet of M3UA tag
+            {
+              case PAR_PROT_DATA:
+                //---------------------------------------------
+                TTCN_Logger::log_event ("Protocol Data");
+                // retrieving length
+                param_length = decode_16b_int(inbuffer+offset); offset+=2;
+                TTCN_Logger::log_event(", DATA: Length of Protocol Data parameter is %d",param_length);
+                //  retrieving M3UA protocol data paremeter opc, dpc, si, ni, mp,
+                //  sls
+                recv_opc = decode_32b_int(inbuffer+offset); offset +=4;
+                recv_dpc = decode_32b_int(inbuffer+offset); offset +=4;
+                recv_si = (unsigned int)(inbuffer[offset++]);
+                recv_ni = (unsigned int)(inbuffer[offset++]);
+                recv_mp = (unsigned int)(inbuffer[offset++]);
+                recv_sls = (unsigned int)(inbuffer[offset++]);
+                TTCN_Logger::log_event(", DATA: decoded Protocol Data parameter:");
+                // filling up TTCN structure
+                if ((Loop==MTP3_ON) ||
+                    (!Filter) ||
+                    (Filter &&
+                     (recv_opc == (unsigned)Sut_Pc) && (recv_dpc == (unsigned)Tester_Pc) &&
+                     (recv_ni == (unsigned)mtp3_ni)
+                   ))
+                {
+                  ASP__MTP3__TRANSFERind recv_msg;
+                  MTP3__Field__sio recv_sio;
+                  recv_sio.ni()= int2bit(recv_ni,2);
+                  recv_sio.prio()= int2bit(recv_mp,2);
+                  recv_sio.si()= int2bit(recv_si,4);
+                  recv_msg.sio() = recv_sio;
+                  recv_msg.sls() = recv_sls;
+                  recv_msg.opc()= recv_opc;
+                  recv_msg.dpc() = recv_dpc;;
+                  recv_msg.data() = OCTETSTRING(param_length-16, // 16 octet paramheader + 5 routing label
+                  &inbuffer[offset]);
+                  recv_msg.log();
+                  close_log_event();
+                  incoming_message ( recv_msg );
+                  offset += param_length-16;
+                  return  length - offset;
+                }
+                else
+                {
+                  close_log_event();
+                  log("Either the received M3UA(OPC, DPC, SI) fields, or the embedded MTP3 rooting label (OPC, DPC) not matched with the filter setting -> packet dropped.");
+                  return  length - offset;
+                }
+                break;
+              default:
+                TTCN_Logger::log_event ("invalid M3UA  param tag:0x%02x%02x-> skipped", PAR_PREFIX_M3UA, inbuffer[offset-1]);
+                skip_par_after_tag(inbuffer, offset);
+            }
+            break;
+          default:
+            TTCN_Logger::log_event ("invalid 1st octet param tag:0x%02x in DATA (packet dropped)",inbuffer[offset-1]);
+            close_log_event();
+            return length -offset;
+            break;
+        }
+      }// Checking parameter tag (offset <length-8)
+      break;
+    default:
+      TTCN_Logger::log_event("Invalid M3UA msg class TransferMessage msg type %d -> packet dropped",
+                             (unsigned int)(inbuffer[M3UA_TYP_OFFS]));
+      close_log_event();
+      send_M3UA_error_msg( PAR_ERRC_UNSMT,  inbuffer[M3UA_TYP_OFFS]);
+      break;
+  }
+
+  return length -offset;
+}
+
+// Set M3UA SingleAPC -  Stores field Single Affected Point Code
+void MTP3asp__PT_PROVIDER::Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par)
+{
+  //setting par type to APC
+  apc_par[0] = PAR_PREFIX_COMMON;
+  apc_par[1] = PAR_AFFECTED_PC;
+  //setting the length to 4+4 = 8
+  apc_par[2] = 0x00;
+  apc_par[3] = 0x08;
+  //setting the mask
+  apc_par[4] = 0x00;
+  //setting the pc
+  encode_24b_int(apc_par+5,pc);
+}
+
+// Send DAVA DUNA to APCinDAUD
+void MTP3asp__PT_PROVIDER::Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int & offset)
+{
+  unsigned int length = decode_16b_int(inbuffer+offset);
+  offset +=2;
+  unsigned int current_pc;
+
+  //checking the length
+  if ((length < 8) || (length%4))
+  { warn("Invalid length in APC parameter -> not processed");
+    return;
+  }
+
+  for (unsigned int i = 4  ; i < length; i += 4)
+  {
+    if (inbuffer[offset++] == 0x00)  // mask===>single pc
+    {
+      current_pc = decode_24b_int(inbuffer+offset);
+      offset +=3;
+      if (dava_sep == current_pc) //dava
+      { Set_M3UA_SingleAPC(dava_sep, dava_1apc_msg+M3UA_MSG_OFFS);
+        log("DAVA will be sent for pc=%d", dava_sep);
+        send_msg(dava_1apc_msg, sizeof_dava_1apc_msg);
+      }
+      else //duna
+      { Set_M3UA_SingleAPC(current_pc, duna_1apc_msg+M3UA_MSG_OFFS);
+        log("DUNA will be sent for pc=%d", current_pc);
+        send_msg(duna_1apc_msg, sizeof_duna_1apc_msg);
+      }
+    }
+    else //masked pc
+    { warn("Unsupported  masking (mask=0x%02x) for PC=%d in APC parameter -> ignored",
+      inbuffer[offset-1], current_pc);
+    }
+  }
+  return;
+}
+
+// send M3UA error msg
+// send an eror msg with error_code. Additional parameter matches to the error code:
+void MTP3asp__PT_PROVIDER::send_M3UA_error_msg(unsigned int error_code, unsigned int add_par )
+{
+  encode_16b_int( error_msg+M3UA_MSG_OFFS+4, error_code);
+  encode_16b_int( error_msg+M3UA_MSG_OFFS+8, add_par);
+  send_msg(error_msg, sizeof_error_msg );
+};
+
+// Coder functions for M3UA:  int -> unsigned char array
+//------------------------------------------------------
+// Result:Less significant byte in highest address
+//        Most Significant Byte first (in lowest address) = MSB = Big Endian = Network Byte Order
+void MTP3asp__PT_PROVIDER::encode_32b_int(unsigned char *to, unsigned int from)
+{
+  to[3] = from & 0xFF;
+  from >>= 8;
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_32b_int(const unsigned char *from)
+{
+  return from[3] | (from[2] << 8) | (from[1] << 16) | (from[0] << 24);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_24b_int(unsigned char *to, unsigned int from)
+{
+  to[2] = from & 0xFF;
+  from >>= 8;
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_24b_int(const unsigned char *from)
+{
+  return from[2] | (from[1] << 8) | (from[0] << 16);
+}
+//------------
+
+void MTP3asp__PT_PROVIDER::encode_16b_int(unsigned char *to, int from)
+{
+  to[1] = from & 0xFF;
+  from >>= 8;
+  to[0] = from & 0xFF;
+}
+//------------
+
+unsigned int MTP3asp__PT_PROVIDER::decode_16b_int(const unsigned char *from)
+{
+  return from[1] | (from[0] << 8);
+}
+//------------
+
+//skip par after tag
+void MTP3asp__PT_PROVIDER::skip_par_after_tag(unsigned char* inbuffer, int &offset)
+{
+  offset += decode_16b_int(inbuffer+offset)-2; //the length contains
+                                               //the param hdr. itself
+  if (offset%4) offset += 4-(offset%4); //skipping padding
+}
+//------------
+#endif
+
+
+
+#ifdef TARGET_TEST
+// --------------------------
+// Functions for Target testing
+// --------------------------
+// In case of target this function handles the received message
+void MTP3asp__PT_PROVIDER::message_incoming(const unsigned char* msg, int messageLength, int)
+{
+  OCTETSTRING rcvData = OCTETSTRING(messageLength, msg);
+
+  int msgType = oct2int(substr(rcvData,0,1));
+  switch (msgType)
+  {
+    case 0: //TRANSFERind message received
+      if(Tcp_is_up) //Registration was already performed
+      {
+        ASP__MTP3__TRANSFERind recv_msg;
+        MTP3__Field__sio recv_sio;
+        BITSTRING sio_bit = oct2bit(substr(rcvData,5,1));
+        recv_sio.ni()= substr(sio_bit,0,2);
+        recv_sio.prio()= substr(sio_bit,2,2);
+        recv_sio.si()= substr(sio_bit,4,4);
+        recv_msg.sio() = recv_sio;
+        recv_msg.opc() = oct2int(substr(rcvData,6,4));
+        recv_msg.dpc() = oct2int(substr(rcvData,10,4));
+        recv_msg.sls() = oct2int(substr(rcvData,14,1));
+        recv_msg.data() = substr(rcvData,15,rcvData.lengthof()-15);
+        if (Tcp_is_up == 1) //No unregistration ongoing
+          incoming_message(recv_msg);
+        else                //Unregistration ongoing
+          log("Received ASP_MTP3_TRANSFERind is ignored since unregistration is started.");
+      }
+      else
+        error("Message was received before successful registration in M3UA server.");
+      break;
+
+    case 4: //Status message received
+      {
+        int status = oct2int(substr(rcvData,5,1));
+        if(Tcp_is_up == 2) // Unregistration ongoing
+        {
+          const char * rcvDat = oct2str(rcvData);
+          log("Message \"%s\" received. Status = %i", rcvDat, status);
+          if (status == 2)
+          {
+            log("Unregistration performed.");
+            Tcp_is_up = 0;
+          }
+          else if (status == 3)
+            error("Unsuccessful unregistration.");
+          else if (status == 5) {
+            if(forward_status) {
+              incoming_message(ASP__MTP3__STATUS(NULL_VALUE));
+            }
+            else {
+              warn("Invalid STATUS message received from M3UA server with status code=%d.", status);
+            }
+          }
+        }
+        else if(Tcp_is_up == 1) // Active state
+        {
+          if (status == 5) {
+            if(forward_status) {
+              incoming_message(ASP__MTP3__STATUS(NULL_VALUE));
+            } 
+          }
+          else {
+            warn("Invalid STATUS message received from M3UA server with status code=%d.", status);
+          }
+        }
+        else // Registration ongoing
+        {
+          const char * rcvDat = oct2str(rcvData);
+          log("Message \"%s\" received. Status = %i", rcvDat, status);
+          if (status == 0)
+          {
+            log("Registration performed.");
+            Tcp_is_up = 1;
+          }
+          else {
+            error("Unsuccessful registration.");
+          }
+        }
+      }
+      break;
+    case 5:
+      {
+        if(forward_pause) incoming_message(ASP__MTP3__PAUSE(NULL_VALUE));
+      }
+      break;
+    case 6:
+      {
+        if(forward_resume) incoming_message(ASP__MTP3__RESUME(NULL_VALUE));
+      }
+      break;
+
+
+    default: //Unexpected message received
+      warn("Invalid message received from M3UA server.");
+  }
+}
+
+void  MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables()
+{
+  if (Sut_Pc==-1) error("Parameter SUT_Pc is not set.");
+  if (Tester_Pc==-1) error("Parameter TESTER_Pc is not set.");
+  if (!Ni_is_set) error("Parameter NI is not set.");
+  if (M3UA_version==0) error("Parameter M3UA_version cannot be set to 0 in TargetM3UA mode.");
+ 
+//packet header
+  header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB);
+}
+
+void  MTP3asp__PT_PROVIDER::Check_Target_TestPort_Variables_STC()
+{
+  if( destinationname == NULL) error("Parameter DestinationName is not set in TargetSTC mode.");
+  
+  header_descr = new PacketHeaderDescr( 1, 4, PacketHeaderDescr::Header_MSB);
+}
+
+void MTP3asp__PT_PROVIDER::Target_user_map(const char *system_port)
+{
+  Tcp_is_up = 0;
+  Check_Target_TestPort_Variables();
+  map_user();
+
+  OCTETSTRING tcpData = int2oct(2,1); //Message type
+  if( destinationname == NULL)
+    tcpData = tcpData + int2oct(char2oct(system_port).lengthof()+15,4); //Length
+  else
+    tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4);
+  tcpData = tcpData + int2oct(mtp3_ni,1);
+  tcpData = tcpData + int2oct(Sut_Pc,4);
+  tcpData = tcpData + int2oct(Tester_Pc,4);
+  tcpData = tcpData + int2oct(M3UA_version,1);
+  if( destinationname == NULL)
+    tcpData = tcpData + char2oct(system_port);
+  else
+    tcpData = tcpData + char2oct(destinationname);
+
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Registration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  int fd = get_socket_fd();
+  pollfd pollFd = { fd, POLLIN, 0 };
+  int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+  if (nEvents == 0)
+    error("No response received for REGISTER message. Exiting after timeout.");
+  if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+    error("No response received for REGISTER message. Exiting after error (%d)",
+      (nEvents < 0) ? errno : 0);
+  Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+}
+
+void MTP3asp__PT_PROVIDER::TargetSTC_user_map(const char *system_port)
+{
+  Tcp_is_up = 0;
+  Check_Target_TestPort_Variables_STC();
+  map_user();
+
+  OCTETSTRING tcpData = int2oct(2,1); //Message type
+  tcpData = tcpData + int2oct(char2oct(destinationname).lengthof()+15,4);
+  tcpData = tcpData + int2oct(0,1);
+  tcpData = tcpData + int2oct(0,4);
+  tcpData = tcpData + int2oct(0,4);
+  tcpData = tcpData + int2oct(0,1);
+  tcpData = tcpData + char2oct(destinationname);
+
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Registration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  int fd = get_socket_fd();
+  pollfd pollFd = { fd, POLLIN, 0 };
+  int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+  if (nEvents == 0)
+    error("No response received for REGISTER message. Exiting after timeout.");
+  if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+    error("No response received for REGISTER message. Exiting after error (%d)",
+      (nEvents < 0) ? errno : 0);
+  Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+}
+
+void MTP3asp__PT_PROVIDER::Target_user_unmap(const char *system_port)
+{
+  OCTETSTRING tcpData = int2oct(3,1); //Message type
+  tcpData = tcpData + int2oct(6,4); //Length
+  tcpData = tcpData + int2oct(0,1);
+  send_outgoing((const unsigned char*)tcpData,tcpData.lengthof());
+
+  TTCN_Logger::begin_event(TTCN_DEBUG);
+  TTCN_Logger::log_event("MTP3 Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_str("Unregistration message sent: ");
+  tcpData.log();
+  TTCN_Logger::end_event();
+
+  Tcp_is_up = 2; //Unregistration ongoing
+
+  while (Tcp_is_up == 2)
+  {
+    int fd = get_socket_fd();
+    pollfd pollFd = { fd, POLLIN, 0 };
+    int nEvents = poll(&pollFd, 1, 3000 /* ms */);
+    if (nEvents == 0)
+      error("No response received for UNREGISTER message. Exiting after timeout.");
+    if (nEvents < 0 || (pollFd.revents & (POLLIN | POLLHUP)) == 0)
+      error("No response received for UNREGISTER message. Exiting after error (%d)",
+        (nEvents < 0) ? errno : 0);
+    Handle_Fd_Event(fd, TRUE, FALSE, FALSE);
+  }
+  unmap_user();
+}
+#endif
+}
diff --git a/MTP3asp_CNL113337/src/MTP3asp_PT.hh b/MTP3asp_CNL113337/src/MTP3asp_PT.hh
new file mode 100644
index 0000000..340f24f
--- /dev/null
+++ b/MTP3asp_CNL113337/src/MTP3asp_PT.hh
@@ -0,0 +1,249 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2009                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PT.hh
+//  Description:  Implementation of port MTP3asp_PT
+//                This test port is written to connect ttcn to SEA 
+//                according to specification ITU-T SS7 MTP3, ANSI, TCC, MPT, IETF, 
+//  Reference:    ITU-T Recommendation Q.704, RFC3332 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2009-04-03
+//  Contact:      http://ttcn.ericsson.se
+
+
+#ifndef MTP3asp_PT_HH
+#define MTP3asp_PT_HH
+
+#include <TTCN3.hh>
+
+#ifdef TARGET_TEST
+#include "Abstract_Socket.hh"
+#endif
+
+#ifndef TARGET_TEST
+#include "mphclib.h"
+#endif
+
+
+#define MAXSIZE 1532 //+32 needed for M3UA
+#define MTP3_ON  1
+#define MTP3_OFF 0
+namespace MTP3asp__Types {
+  class ASP__MTP3__TRANSFERind;
+  class ASP__MTP3__PAUSE;
+  class ASP__MTP3__RESUME;
+  class ASP__MTP3__STATUS;
+  class ASP__MTP3__TRANSFERreq;
+}
+namespace MTP3asp__PortType {
+
+class MTP3asp__PT_PROVIDER : public PORT
+#ifdef TARGET_TEST
+    , public Abstract_Socket
+#endif
+ {
+protected:
+  // pointer to member: user_map/unmap methods
+  typedef void (MTP3asp__PT_PROVIDER::*usermap_t)(const char *system_port);
+  // pointer to member: user_connect methods
+  typedef void (MTP3asp__PT_PROVIDER::*userconnect_t)();
+  // pointer to member: interpreter methods
+#ifndef TARGET_TEST
+  typedef void (MTP3asp__PT_PROVIDER::*interpreter_t)(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+
+  void M3UA_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void M3UA_user_map(const char *system_port);
+  void M3UA_user_connect();
+  void M3UA_user_unmap(const char *system_port);
+  void MTP3_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void MTP3_user_map(const char *system_port);  // common for MTP3 ITU and MTP3 ANSI
+  void MTP3_user_connect();
+  void MTP3_user_unmap(const char *system_port);// common for MTP3 ITU and MTP3 ANSI
+  void STC_user_connect();
+  void STC_interpreter(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con);
+  void STC_user_map(const char *system_port);
+  void STC_user_unmap(const char *system_port);
+#endif
+#ifdef TARGET_TEST
+  //Map and unmap for target
+  void Target_user_map(const char *system_port);
+  void Target_user_unmap(const char *system_port);
+  void TargetSTC_user_map(const char *system_port);
+#endif
+  
+public:
+  MTP3asp__PT_PROVIDER(const char *par_port_name=NULL);
+  ~MTP3asp__PT_PROVIDER();
+  
+  typedef enum { MTP3itu, MTP3ansi, MTP3ttc, MTP3mpt, M3UA, TargetM3UA, MTP3bttc,MTP3iup, STC, TargetSTC } MTPServiceType_t ;
+
+  MTPServiceType_t MTPServiceType ; // ctor default is MTP3itu
+  void set_parameter(const char *parameter_name, const char *parameter_value);
+  void error(const char *msg, ...);
+  void log(const char *msg, ...);
+#ifndef TARGET_TEST
+  void user_connect();
+
+  void set_channel(int chnl) {channel=chnl;};
+  void MTP3_open_channel(boolean http);
+  void MTP3_close_connection();
+
+  boolean wait_for_open();
+  int conn_state;
+
+  interpreter_t interpreter; // pointer to interpreter members, ctor default is MTP3_ITU_interpreter
+  void doInterpret(unsigned char* inbuffer,int length,int from_channel,CONNECTION* con)
+  { (this->*interpreter)(inbuffer,length,from_channel, con); }
+#endif
+  //parameter handling
+  boolean dynamicConnection, connectionUp;
+  char *hostname;
+  int httpport;
+  char *entityname;
+  int MTP_fd;
+
+protected: 
+  void user_map(const char *system_port);
+  void user_unmap(const char *system_port);
+
+  void debuglog(const char *msg, ...);
+  void warn(const char *msg, ...);
+  void close_log_event();
+
+  usermap_t user_map_p ; //  pointer to user_map members, default is MTP3itu
+  usermap_t user_unmap_p; // pointer to user_unmap members, default is MTP3itu
+  userconnect_t user_connect_p;
+
+  void user_start();
+  void user_stop();
+  
+  void outgoing_send(const MTP3asp__Types::ASP__MTP3__TRANSFERreq& send_par);
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__TRANSFERind& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__PAUSE& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__RESUME& incoming_par) = 0;
+  virtual void incoming_message
+    (const MTP3asp__Types::ASP__MTP3__STATUS& incoming_par) = 0;
+#ifndef TARGET_TEST
+  void encode_56bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_56bLSB_int(const unsigned char *from);
+  void encode_48bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_48bLSB_int(const unsigned char *from);
+  void encode_40bLSB_int(unsigned char *to, unsigned long long int from);
+  long long unsigned int decode_40bLSB_int(const unsigned char *from);
+  void encode_32bLSB_int(unsigned char *to, unsigned int from);
+  unsigned int decode_32bLSB_int(const unsigned char *from);
+  void encode_24bLSB_int(unsigned char *to, int from);
+  unsigned int decode_24bLSB_int(const unsigned char *from);
+  void encode_16bLSB_int(unsigned char *to, int from);
+  unsigned int decode_16bLSB_int(const unsigned char *from);
+  void encode_32b_int(unsigned char *to, unsigned int from);
+  unsigned int decode_32b_int(const unsigned char *from);
+  void encode_24b_int(unsigned char *to, unsigned int from);
+  unsigned int decode_24b_int(const unsigned char *from);
+  void encode_16b_int(unsigned char *to, int from);
+  unsigned int decode_16b_int(const unsigned char *from);
+  void skip_par_after_tag(unsigned char* inbuffer, int &offset);
+
+  void GetPointCodes(unsigned int &sls,unsigned int &opc,unsigned int &dpc, unsigned char* msg);
+  void GetPointCodesIUP(unsigned int &cic,unsigned int &opc,unsigned int &dpc, unsigned char* msg);
+  void SetPointCodes(unsigned int sls, unsigned int opc, unsigned int dpc, unsigned char* msg);
+  void SetPointCodesIUP(unsigned int cic, unsigned int opc, unsigned int dpc, unsigned char* msg);
+  int  ChangePointCodes(unsigned char* outbuff, unsigned char *inbuff, int len);
+  void Set_M3UA_SingleAPC(unsigned int pc, unsigned char* apc_par); //for ITU and ANSI
+  bool Check_M3UA_SingleITUAPC(unsigned int pc, unsigned char* apc_par);
+  void Send_DAVA_DUNA_to_APCinDAUD(unsigned int dava_sep, unsigned char* inbuffer, int &offset );
+  void processing_MTP3_management_msg(unsigned char* inbuff,int len);
+  void processing_MTP3_test_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_MGMT_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_Transfer_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_SSNM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_ASPSM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_ASPTM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_RKM_msg(unsigned char* inbuff,int len);
+  int processing_M3UA_unsupported_msg_class(unsigned char* inbuff,int len);
+  int  Check_PcMatch(unsigned int opc, unsigned int dpc, unsigned char *buff);
+  void send_msg(unsigned char *outbuff, int length);
+  void send_M3UA_error_msg(unsigned int error_code, unsigned int add_par );
+  void Check_TestPort_Variables();
+  void Check_TestPort_Variables_STC();
+#endif
+#ifdef TARGET_TEST
+  void Check_Target_TestPort_Variables();
+  void Check_Target_TestPort_Variables_STC();
+
+  //Functions for abstract socket handling
+  void message_incoming(const unsigned char*, int length, int client_id = -1);
+  void Add_Fd_Read_Handler(int fd) { Handler_Add_Fd_Read(fd); }
+  void Add_Fd_Write_Handler(int fd) { Handler_Add_Fd_Write(fd); }
+  void Remove_Fd_Read_Handler(int fd) { Handler_Remove_Fd_Read(fd); }
+  void Remove_Fd_Write_Handler(int fd) { Handler_Remove_Fd_Write(fd); }
+  void Remove_Fd_All_Handlers(int fd) { Handler_Remove_Fd(fd); }
+  void Handler_Uninstall() { Uninstall_Handler(); }
+  void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE,
+    boolean call_anyway = TRUE, boolean is_periodic = TRUE) {
+    Handler_Set_Timer(call_interval, is_timeout, call_anyway, is_periodic);
+  }
+  const char* local_address_name() { return "localIPAddr";}
+  const char* local_port_name()    { return "localPort";}
+  const char* remote_address_name(){ return "M3UAtarget_TCP_IPAddr";}
+  const char* remote_port_name()   { return "M3UAtarget_TCP_Port";}
+  const char* halt_on_connection_reset_name(){ return "halt_on_connection_reset";}
+  const char* server_mode_name()   { return "client_mode";}
+  const char* socket_debugging_name(){ return "socket_debugging";}
+  const char* nagling_name()       { return "nagling";}
+  const char* server_backlog_name(){ return "server_backlog";}
+  const PacketHeaderDescr* Get_Header_Descriptor() const {return header_descr;}
+#endif
+
+private:
+    void Handle_Fd_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error);
+    void Handle_Timeout(double time_since_last_call);
+
+    unsigned char M3UA_version;
+    int channel;
+    unsigned char buffer[MAXSIZE];
+    char *destinationname;
+    char *iid_string;
+    boolean Ni_is_set;
+    int Loop,Filter,Sut_Pc,Tester_Pc;
+    typedef enum { AssocDown, AssocEstabl, AssocInac, AssocActive} M3UAStateType_t;
+    M3UAStateType_t M3UAState;
+    int mtp3_ni; // network indicator in case of MTP3
+    int stored_bttc_octet; // used for storage of an additional first byte in MTP3bttc
+    
+#ifndef TARGET_TEST
+    MPH_IID iid;
+    CONNECTION *myConnection;
+#endif
+    bool forward_resume, forward_pause, forward_status;
+#ifdef TARGET_TEST
+    int Tcp_is_up;
+    PacketHeaderDescr *header_descr;
+    bool is_packet_hdr_length_offset, is_packet_hdr_nr_bytes_in_length,
+	    is_packet_hdr_byte_order;
+    int packet_hdr_length_offset, packet_hdr_nr_bytes_in_length;
+    PacketHeaderDescr::HeaderByteOrder packet_hdr_byte_order;
+#endif
+};
+
+extern BOOLEAN f__MTP3__SEA__connect__extern
+  (MTP3asp__PT_PROVIDER& portRef, const CHARSTRING& Hostname,
+   const INTEGER& Port, const CHARSTRING& EntityName,const BOOLEAN& Http);
+
+extern BOOLEAN f__MTP3__SEA__disconnect__extern
+  (MTP3asp__PT_PROVIDER& portRef);
+
+}
+#endif
diff --git a/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn b/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn
new file mode 100644
index 0000000..7c5a06b
--- /dev/null
+++ b/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn
@@ -0,0 +1,66 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2008                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_PortType.ttcn
+//  Reference:    ITU-T Recommendation Q.704, RFC3332 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2008-02-07
+//  Contact:      http://ttcn.ericsson.se
+
+module MTP3asp_PortType
+{
+
+  import from MTP3asp_Types all;
+// *************************************************************************
+// *  MTP3 port type definitions                                           *
+// *************************************************************************
+
+    // MTP3 port type used by the component up to the MTP3 SAP
+    // (eg. any component connected to the MTP3 test port)
+    type port MTP3asp_PT message
+     {
+      in  ASP_MTP3_TRANSFERind;
+      in  ASP_MTP3_PAUSE;
+      in  ASP_MTP3_RESUME;
+      in  ASP_MTP3_STATUS;
+      out ASP_MTP3_TRANSFERreq;
+     } with {extension "provider internal"} //!!ethlel
+
+    // MTP3 port type used by the component up to the MTP3 SAP
+    // (e.g. the distribution component)
+    type port MTP3asp_SP_PT message
+     {
+      in  ASP_MTP3_TRANSFERreq;
+      out ASP_MTP3_TRANSFERind;
+     }
+      with {extension "internal"}
+
+//Connecting functions
+//----------------------------
+/*
+ethlel
+
+external function f_MTP3_SEA_connect
+ ( inout MTP3asp_PT  portRef, 
+   in charstring  Hostname,
+   in integer     Port,
+   in charstring  EntityName,
+   in boolean     Http //or MPH Port is provided  
+ )return boolean;
+
+external function f_MTP3_SEA_disconnect
+ ( inout MTP3asp_PT  portRef
+ )return boolean;
+*/
+
+
+}//eof module
diff --git a/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn b/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn
new file mode 100644
index 0000000..e96f420
--- /dev/null
+++ b/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn
@@ -0,0 +1,324 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2006                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File:         MTP3asp_Types.ttcn
+//  Description:  CCSS7 Message Transfer Part primitive (ASP) definitions
+//                according to specification ITU-T SS7 MTP3,
+//  Reference:    ITU-T Recommendation Q.704, RFC3332, ANSI T.1.111.1-2001, TCC 
+//  Rev:          R11A01
+//  Prodnr:       CNL 113 337
+//  Updated:      2007-09-17
+//  Contact:      http://ttcn.ericsson.se
+//
+module MTP3asp_Types.objid 
+  { 
+    itu_t(0) identified_organization (4) etsi(0) reserved(127)
+    etsi_identified_organization(0) ericsson(5) testing (0)
+    generic(0) mtp3(0) v96(3) aspDefinitions(3) patchNo(0)
+  }
+
+{//start of the module
+
+// *************************************************************************
+//  External encoding/decoding functions
+// *************************************************************************
+
+external function enc_MTP3_to_M3UAserver_msg (in MTP3_to_M3UAserver_msg pdu)
+  return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+
+external function dec_MTP3_to_M3UAserver_msg(in octetstring stream)
+   return MTP3_to_M3UAserver_msg
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+
+// *************************************************************************
+// *  Type Definitions Part                                                *
+// *************************************************************************
+group Types
+{
+  group MessageTypes
+  {
+    group ASPs
+    {
+    //***********************************************************************
+    //*  ASP type definitions                                               *
+    //*          Note, that ASP types shall be TTCN-3 definitions to allow  *
+    //*          the use of anytype in the data field                       *
+    //***********************************************************************
+
+      type record MTP3_Field_sio
+      {
+        bitstring ni   length(2),
+        bitstring prio length(2),
+        bitstring si   length(4)
+      } with { variant "FIELDORDER(msb)";
+             };
+      
+      type record ASP_MTP3_TRANSFERind
+      {
+        MTP3_Field_sio    sio,
+        integer           opc,
+        integer           dpc,
+        integer           sls,
+        octetstring       data
+      } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (sls) "FIELDLENGTH(8)"
+             };
+
+      type record ASP_MTP3_PAUSE {};
+
+      type record ASP_MTP3_RESUME {};
+
+      type record ASP_MTP3_STATUS {};
+
+      type record ASP_MTP3_TRANSFERreq
+      {
+        MTP3_Field_sio    sio,
+        integer           opc,
+        integer           dpc,
+        integer           sls,
+        octetstring       data
+      } with { variant (opc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (dpc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (sls) "FIELDLENGTH(8)"
+             };
+    }//end group ASPs
+
+    //***********************************************************************
+    //* Type definition of the message which is sent between MTP3 test port *
+    //*  and SCTP server over TCP.                                          *
+    //***********************************************************************
+    group MTP3_SCTPserver
+    {
+      type record ASP_REGISTER_M3UA
+      {
+        integer     ni (0..3),
+        integer     sut_pc,
+        integer     tester_pc,
+        integer     m3ua_version,
+        charstring  entity
+      } with { variant (ni) "FIELDLENGTH(8)";
+               variant (sut_pc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (tester_pc) "BYTEORDER(last), FIELDLENGTH(32)";
+               variant (m3ua_version) "FIELDLENGTH(8)"
+      };
+      
+      
+      // Possible values:
+      // MTP3_to_SCTPserver_data/status:
+      const integer reg_ok_status      := 0;
+      const integer reg_error_status   := 1;
+      const integer unreg_ok_status    := 2;
+      const integer unreg_error_status := 3;
+
+      const integer send_error_status  := 5;
+      const integer kill_status        := 255;
+      
+      // MTP3_to_SCTPserver_data/pause:
+      const integer SCTP_COMLOST_pause := 0;
+      const integer M3UA_ASPDN_pause   := 1;
+      const integer M3UA_ASPIA_pause   := 2;
+      
+      // MTP3_to_SCTPserver_data/resume:
+      const integer ok_resume := 0;
+      
+      type union MTP3_to_SCTPserver_data
+      {
+        ASP_MTP3_TRANSFERind transfer_ind,
+        ASP_MTP3_TRANSFERreq transfer_req,
+        ASP_REGISTER_M3UA    register,
+        integer              unregister (0..255),
+        integer              status (0..255),
+        integer              pause (0..255),
+        integer              resume (0..255)
+      }
+      
+      // MTP3_to_M3UAserver_msg/msgType:
+      const integer transfer_ind_msgType := 0;
+      const integer transfer_req_msgType := 1;
+      const integer register_msgType     := 2;
+      const integer unregister_msgType   := 3;
+      const integer status_msgType       := 4;
+      const integer pause_msgType        := 5;
+      const integer resume_msgType       := 6;
+      
+      type record MTP3_to_M3UAserver_msg
+      {
+        integer                 msgType (0..255),
+        integer                 msgLength,
+        MTP3_to_SCTPserver_data data
+      } with { variant (data) "CROSSTAG(
+                              transfer_ind, msgType = transfer_ind_msgType;
+                              transfer_req, msgType = transfer_req_msgType;
+                              register,     msgType = register_msgType;
+                              unregister,   msgType = unregister_msgType;
+                              status,       msgType = status_msgType;
+                              pause,        msgType = pause_msgType;
+                              resume,       msgType = resume_msgType )";
+               variant (msgLength) "FIELDLENGTH(32)";
+               variant (msgLength) "LENGTHTO(msgType,msgLength,data)";
+               variant (msgLength) "BYTEORDER(last)"
+             };
+    }//end group MTP3_SCTPserver
+  }//end group Messagetypes
+} with {encode "RAW"}//Types
+
+group Templates
+{
+  group MessageTemplates
+  {
+    group ASPtemplates
+    {
+    // *******************************************************************
+    // *   ASP template definitions                                      *
+    // *******************************************************************
+
+    // Base templates 
+    // These general templates can be used as an example or as a base
+    // template for other templates.
+      template ASP_MTP3_TRANSFERind t_ASP_MTP3_TRANSFERind
+      ( 
+        template MTP3_Field_sio pl_SIO,
+        template integer        pl_OPC,
+        template integer        pl_DPC,
+        template integer        pl_SLS,
+        template octetstring    pl_data
+      ):=
+      {
+        sio  := pl_SIO,
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_sio
+      ( 
+       template bitstring      pl_NI,
+       template bitstring      pl_PRIO,
+       template bitstring      pl_SI,
+       template integer        pl_OPC,
+       template integer        pl_DPC,
+       template integer        pl_SLS,
+       template octetstring    pl_data
+      ):=
+      {
+        sio  := 
+        {
+          ni := pl_NI,
+          prio := pl_PRIO,
+          si := pl_SI
+        },
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind :=
+      {
+        sio  := ?,
+        opc  := ?,
+        dpc  := ?,
+        sls  := ?,
+        data := ?
+      }
+
+      template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq
+      ( 
+        MTP3_Field_sio pl_SIO,
+        integer        pl_OPC,
+        integer        pl_DPC,
+        integer        pl_SLS,
+        octetstring    pl_data
+      ):=
+      {
+        sio  := pl_SIO,
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+
+      template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq_sio
+      ( 
+       template bitstring      pl_NI,
+       template bitstring      pl_PRIO,
+       template bitstring      pl_SI,
+       template integer        pl_OPC,
+       template integer        pl_DPC,
+       template integer        pl_SLS,
+       template octetstring    pl_data
+      ):=
+      {
+        sio  := 
+        {
+          ni := pl_NI,
+          prio := pl_PRIO,
+          si := pl_SI
+        },
+        opc  := pl_OPC,
+        dpc  := pl_DPC,
+        sls  := pl_SLS,
+        data := pl_data 
+      }
+
+      template ASP_MTP3_TRANSFERreq tr_ASP_MTP3_TRANSFERreq :=
+      {
+        sio  := ?,
+        opc  := ?,
+        dpc  := ?,
+        sls  := ?,
+        data := ? 
+      }
+    
+      template ASP_MTP3_TRANSFERind tr_ASP_MTP3_TRANSFERind_stc :=
+      {
+        sio  := 
+        {
+          ni := '00'B,
+          prio := '00'B,
+          si := '0000'B
+        },
+        opc  := 0,
+        dpc  := 0,
+        sls  := 0,
+        data := ? 
+      }
+    
+      template ASP_MTP3_TRANSFERreq t_ASP_MTP3_TRANSFERreq_stc
+      ( template octetstring    pl_data ):=
+      {
+        sio  := 
+        {
+          ni := '00'B,
+          prio := '00'B,
+          si := '0000'B
+        },
+        opc  := 0,
+        dpc  := 0,
+        sls  := 0,
+        data := pl_data 
+      }
+    
+    }//end group ASPtemplates
+  }//end group Messagetemplates
+}//end group Templates
+
+}//end module
+
+
diff --git a/SCCP_CNL113341/SCCP_CNL113341.tpd b/SCCP_CNL113341/SCCP_CNL113341.tpd
new file mode 100644
index 0000000..31e5153
--- /dev/null
+++ b/SCCP_CNL113341/SCCP_CNL113341.tpd
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright Test Competence Center (TCC) ETH 2012
+
+  The copyright to the computer  program(s) herein  is the property of TCC.
+  The program(s) may be used and/or copied only with the written permission
+  of TCC or in accordance with  the terms and conditions  stipulated in the
+  agreement/contract under which the program(s) has been supplied.
+
+
+   File:               SCCP_CNL113341.tpd
+   Description:        tpd project file
+   Rev:                R6A05
+   Prodnr:             CNL 113 341
+   Updated:            2012-11-23
+   Contact:            http://ttcn.ericsson.se
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>SCCP_CNL113341</ProjectName>
+  <ReferencedProjects>
+    <ReferencedProject name="MTP3asp_CNL113337" projectLocationURI="../../TestPorts/MTP3asp_CNL113337/MTP3asp_CNL113337.tpd"/>
+    <ReferencedProject name="ProtocolModules_Common" projectLocationURI="../../ProtocolModules/COMMON/ProtocolModules_Common.tpd"/>
+  </ReferencedProjects>
+  <Folders>
+    <FolderResource projectRelativePath="doc" relativeURI="doc"/>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="doc/SCCP_CNL113341_FS.pdf" relativeURI="doc/SCCP_CNL113341_FS.pdf"/>
+    <FileResource projectRelativePath="doc/SCCP_CNL113341_PRI.pdf" relativeURI="doc/SCCP_CNL113341_PRI.pdf"/>
+    <FileResource projectRelativePath="doc/SCCP_CNL113341_UG.pdf" relativeURI="doc/SCCP_CNL113341_UG.pdf"/>
+    <FileResource projectRelativePath="src/SCCP_Emulation.ttcn" relativeURI="src/SCCP_Emulation.ttcn"/>
+    <FileResource projectRelativePath="src/SCCP_EncDec.cc" relativeURI="src/SCCP_EncDec.cc"/>
+    <FileResource projectRelativePath="src/SCCP_Mapping.ttcnpp" relativeURI="src/SCCP_Mapping.ttcnpp"/>
+    <FileResource projectRelativePath="src/SCCP_Types.ttcn" relativeURI="src/SCCP_Types.ttcn"/>
+    <FileResource projectRelativePath="src/SCCPasp_Types.ttcn" relativeURI="src/SCCPasp_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>USE_MTP3_DISTRIBUTOR</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/SCCP_CNL113341</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+    <Configuration name="USE_MTP3_DISTRIBUTOR">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/SCCP_CNL113341</targetExecutable>
+          <TTCN3preprocessorDefines>
+            <listItem>USE_MTP3_DISTRIBUTOR</listItem>
+          </TTCN3preprocessorDefines>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+    <Configuration name="NO USE_MTP3_DISTRIBUTOR">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/SCCP_CNL113341</targetExecutable>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/SCCP_CNL113341/demo/General_Types.ttcn b/SCCP_CNL113341/demo/General_Types.ttcn
new file mode 120000
index 0000000..354ebf3
--- /dev/null
+++ b/SCCP_CNL113341/demo/General_Types.ttcn
@@ -0,0 +1 @@
+../../../ProtocolModules/COMMON/src/General_Types.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/MTP3asp_PT.cc b/SCCP_CNL113341/demo/MTP3asp_PT.cc
new file mode 120000
index 0000000..44d08bb
--- /dev/null
+++ b/SCCP_CNL113341/demo/MTP3asp_PT.cc
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PT.cc
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/MTP3asp_PT.hh b/SCCP_CNL113341/demo/MTP3asp_PT.hh
new file mode 120000
index 0000000..30dfc24
--- /dev/null
+++ b/SCCP_CNL113341/demo/MTP3asp_PT.hh
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PT.hh
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn b/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn
new file mode 120000
index 0000000..1994864
--- /dev/null
+++ b/SCCP_CNL113341/demo/MTP3asp_PortType.ttcn
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/MTP3asp_Types.ttcn b/SCCP_CNL113341/demo/MTP3asp_Types.ttcn
new file mode 120000
index 0000000..9f03c54
--- /dev/null
+++ b/SCCP_CNL113341/demo/MTP3asp_Types.ttcn
@@ -0,0 +1 @@
+../../../TestPorts/MTP3asp_CNL113337/src/MTP3asp_Types.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/Makefile.ini b/SCCP_CNL113341/demo/Makefile.ini
new file mode 100644
index 0000000..4e764a3
--- /dev/null
+++ b/SCCP_CNL113341/demo/Makefile.ini
@@ -0,0 +1,737 @@
+# This Makefile was generated by the Makefile Generator
+# of the TTCN-3 Test Executor version 1.7.pl0
+# for Gabor Bettesch (ethgbh@mwux018) on Tue Apr  3 10:18:42 2007
+
+# Copyright 2000-2007 Test Competence Center, Ericsson R & D, Hungary
+# For trouble reporting use the tool MTTSMS.
+# For TR writers guide please visit the web page: http://ttcn.ericsson.se
+
+# The following make commands are available:
+# - make, make all     Builds the executable test suite.
+# - make archive       Archives all source files.
+# - make check         Checks the semantics of TTCN-3 and ASN.1 modules.
+# - make clean         Removes all generated files.
+# - make compile       Translates TTCN-3 and ASN.1 modules to C++.
+# - make dep           Creates/updates dependency list.
+# - make objects       Builds the object files without linking the executable.
+# - make preprocess    Preprocess TTCN-3 files.
+# - make tags          Creates/updates tags file using ctags.
+
+# WARNING! This Makefile can be used with GNU make only.
+# Other versions of make may report syntax errors in it.
+
+#
+# Do NOT touch this line...
+#
+.PHONY: all archive check clean dep objects preprocess
+
+#
+# Set these variables...
+#
+
+# The path of your TTCN-3 Test Executor installation:
+# Uncomment this line to override the environment variable.
+# TTCN3_DIR =
+
+# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32)
+PLATFORM = SOLARIS8
+
+# Your C++ compiler:
+CXX = g++
+
+# C preprocessor used for TTCN-3 files:
+CPP = cpp
+
+# Flags for the C++ preprocessor (and makedepend as well):
+CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include -I$(SEA_DIR)/include
+
+# Flags for preprocessing TTCN-3 files:
+CPPFLAGS_TTCN3 =
+
+# Flags for the C++ compiler:
+CXXFLAGS = -Wall
+
+# Flags for the linker:
+LDFLAGS =
+
+# Flags for the TTCN-3 and ASN.1 compiler:
+COMPILER_FLAGS = -L
+
+# Execution mode: (either ttcn3 or ttcn3-parallel)
+TTCN3_LIB = ttcn3-parallel
+
+# The path of your OpenSSL installation:
+# If you do not have your own one, leave it unchanged.
+OPENSSL_DIR = $(TTCN3_DIR)
+
+SEA_DIR = /vobs/ttcn/TCC_Releases/Other/SEA_LATEST
+# Directory to store the archived source files:
+ARCHIVE_DIR = backup
+
+#
+# You may change these variables. Add your files if necessary...
+#
+
+# TTCN-3 modules of this project:
+TTCN3_MODULES = General_Types.ttcn MTP3asp_PortType.ttcn MTP3asp_Types.ttcn SCCP_Emulation.ttcn SCCP_Types.ttcn SCCPasp_Types.ttcn SCCP_selftest.ttcn SCCP_Testcases.ttcn
+
+# TTCN-3 modules to preprocess:
+TTCN3_PP_MODULES = SCCP_Mapping.ttcnpp
+
+# Files to include in TTCN-3 preprocessed modules:
+TTCN3_INCLUDES =
+
+# ASN.1 modules of this project:
+ASN1_MODULES =
+
+# TTCN-3 source files generated by the C preprocessor:
+PREPROCESSED_TTCN3_MODULES = SCCP_Mapping.ttcn
+
+# C++ source & header files generated from the TTCN-3 & ASN.1 modules of
+# this project:
+GENERATED_SOURCES = $(TTCN3_MODULES:.ttcn=.cc) $(TTCN3_PP_MODULES:.ttcnpp=.cc) $(ASN1_MODULES:.asn=.cc)
+GENERATED_HEADERS = $(GENERATED_SOURCES:.cc=.hh)
+
+# C/C++ Source & header files of Test Ports, external functions and
+# other modules:
+USER_SOURCES = MTP3asp_PT.cc
+USER_HEADERS = MTP3asp_PT.hh
+
+# Object files of this project that are needed for the executable test suite:
+OBJECTS = $(GENERATED_SOURCES:.cc=.o) $(USER_SOURCES:.cc=.o)
+
+# Other files of the project (Makefile, configuration files, etc.)
+# that will be added to the archived source files:
+OTHER_FILES = Makefile SCCP_selftest.cfg
+
+# The name of the executable test suite:
+TARGET = SCCP_selftest
+
+#
+# Do not modify these unless you know what you are doing...
+# Platform specific additional libraries:
+#
+SOLARIS_LIBS = -lsocket -lnsl
+SOLARIS8_LIBS = -lsocket -lnsl
+LINUX_LIBS =
+FREEBSD_LIBS =
+WIN32_LIBS =
+
+#
+# Rules for building the executable...
+#
+
+all: $(TARGET) ;
+
+objects: $(OBJECTS) ;
+
+$(TARGET): $(OBJECTS)
+	$(CXX) $(LDFLAGS) -o $@ $^ \
+	-L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \
+	-L$(OPENSSL_DIR)/lib -lcrypto $($(PLATFORM)_LIBS) \
+        $(SEA_DIR)/lib/libmphclib.a
+
+.cc.o .c.o:
+	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+%.ttcn: %.ttcnpp $(TTCN3_INCLUDES)
+	$(CPP) -x c -nostdinc $(CPPFLAGS_TTCN3) $< $@
+
+preprocess: $(PREPROCESSED_TTCN3_MODULES) ;
+
+$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
+	@if [ ! -f $@ ]; then $(RM) compile; $(MAKE) compile; fi
+
+check: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) $^
+
+compile: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) $^ - $?
+	touch $@
+
+browserdata.dat: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -B -s $(COMPILER_FLAGS) $^
+
+tags: $(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES) \
+$(USER_HEADERS) $(USER_SOURCES)
+	$(TTCN3_DIR)/bin/ctags_ttcn3 --line-directives=yes $^
+
+clean:
+	-$(RM) $(TARGET) $(OBJECTS) $(GENERATED_HEADERS) \
+	$(GENERATED_SOURCES) $(PREPROCESSED_TTCN3_MODULES) compile \
+	browserdata.dat tags *.log
+
+dep: $(GENERATED_SOURCES) $(USER_SOURCES)
+	makedepend $(CPPFLAGS) $^
+
+archive:
+	mkdir -p $(ARCHIVE_DIR)
+	tar -cvhf - $(TTCN3_MODULES) $(TTCN3_PP_MODULES) \
+	$(TTCN3_INCLUDES) $(ASN1_MODULES) \
+	$(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \
+	| gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz
+
+#
+# Add your rules here if necessary...
+#
+
+# DO NOT DELETE
+
+General_Types.o: General_Types.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+General_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h
+General_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+General_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+General_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+General_Types.o: /usr/include/stdio_impl.h
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+General_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+General_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+General_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h
+General_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+General_Types.o: /usr/include/sys/select.h /usr/include/time.h
+General_Types.o: /usr/include/iso/time_iso.h
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+General_Types.o: /usr/include/regex.h
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+General_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+MTP3asp_PortType.o: MTP3asp_PortType.hh MTP3asp_Types.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+MTP3asp_PortType.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_PortType.o: /usr/include/sys/feature_tests.h
+MTP3asp_PortType.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h
+MTP3asp_PortType.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h
+MTP3asp_PortType.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+MTP3asp_PortType.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+MTP3asp_PortType.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_PortType.o: /usr/include/sys/time.h /usr/include/sys/types.h
+MTP3asp_PortType.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_PortType.o: /usr/include/sys/select.h /usr/include/time.h
+MTP3asp_PortType.o: /usr/include/iso/time_iso.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+MTP3asp_PortType.o: /usr/include/regex.h
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+MTP3asp_PortType.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+MTP3asp_PortType.o: MTP3asp_PT.hh
+MTP3asp_PortType.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+MTP3asp_Types.o: MTP3asp_Types.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+MTP3asp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+MTP3asp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+MTP3asp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+MTP3asp_Types.o: /usr/include/stdio_impl.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+MTP3asp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+MTP3asp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h
+MTP3asp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_Types.o: /usr/include/sys/select.h /usr/include/time.h
+MTP3asp_Types.o: /usr/include/iso/time_iso.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+MTP3asp_Types.o: /usr/include/regex.h
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+MTP3asp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_Emulation.o: SCCP_Emulation.hh SCCP_Mapping.hh SCCP_Types.hh
+SCCP_Emulation.o: MTP3asp_PortType.hh MTP3asp_Types.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCP_Emulation.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCP_Emulation.o: /usr/include/sys/feature_tests.h
+SCCP_Emulation.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h
+SCCP_Emulation.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h
+SCCP_Emulation.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCP_Emulation.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCP_Emulation.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCP_Emulation.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCP_Emulation.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCP_Emulation.o: /usr/include/sys/select.h /usr/include/time.h
+SCCP_Emulation.o: /usr/include/iso/time_iso.h
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCP_Emulation.o: /usr/include/regex.h
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCP_Emulation.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_Emulation.o: MTP3asp_PT.hh
+SCCP_Emulation.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+SCCP_Emulation.o: SCCPasp_Types.hh General_Types.hh
+SCCP_Types.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCP_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCP_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+SCCP_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+SCCP_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+SCCP_Types.o: /usr/include/stdio_impl.h
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCP_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCP_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCP_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCP_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCP_Types.o: /usr/include/sys/select.h /usr/include/time.h
+SCCP_Types.o: /usr/include/iso/time_iso.h
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCP_Types.o: /usr/include/regex.h
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCP_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_Types.o: MTP3asp_PT.hh
+SCCP_Types.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+SCCP_Types.o: SCCPasp_Types.hh General_Types.hh
+SCCPasp_Types.o: SCCPasp_Types.hh General_Types.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCPasp_Types.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCPasp_Types.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+SCCPasp_Types.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+SCCPasp_Types.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+SCCPasp_Types.o: /usr/include/stdio_impl.h
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCPasp_Types.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCPasp_Types.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCPasp_Types.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCPasp_Types.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCPasp_Types.o: /usr/include/sys/select.h /usr/include/time.h
+SCCPasp_Types.o: /usr/include/iso/time_iso.h
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCPasp_Types.o: /usr/include/regex.h
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCPasp_Types.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_selftest.o: SCCP_selftest.hh SCCP_Emulation.hh SCCP_Mapping.hh
+SCCP_selftest.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCP_selftest.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCP_selftest.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+SCCP_selftest.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+SCCP_selftest.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+SCCP_selftest.o: /usr/include/stdio_impl.h
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCP_selftest.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCP_selftest.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCP_selftest.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCP_selftest.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCP_selftest.o: /usr/include/sys/select.h /usr/include/time.h
+SCCP_selftest.o: /usr/include/iso/time_iso.h
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCP_selftest.o: /usr/include/regex.h
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCP_selftest.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_selftest.o: MTP3asp_PT.hh
+SCCP_selftest.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+SCCP_selftest.o: SCCPasp_Types.hh General_Types.hh
+SCCP_Testcases.o: SCCP_Testcases.hh SCCP_Emulation.hh SCCP_Mapping.hh
+SCCP_Testcases.o: SCCP_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCP_Testcases.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCP_Testcases.o: /usr/include/sys/feature_tests.h
+SCCP_Testcases.o: /usr/include/sys/isa_defs.h /usr/include/stdio.h
+SCCP_Testcases.o: /usr/include/iso/stdio_iso.h /usr/include/sys/va_list.h
+SCCP_Testcases.o: /usr/include/stdio_tag.h /usr/include/stdio_impl.h
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCP_Testcases.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCP_Testcases.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCP_Testcases.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCP_Testcases.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCP_Testcases.o: /usr/include/sys/select.h /usr/include/time.h
+SCCP_Testcases.o: /usr/include/iso/time_iso.h
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCP_Testcases.o: /usr/include/regex.h
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCP_Testcases.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_Testcases.o: MTP3asp_PT.hh
+SCCP_Testcases.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+SCCP_Testcases.o: SCCPasp_Types.hh General_Types.hh
+SCCP_Mapping.o: SCCP_Mapping.hh SCCP_Types.hh MTP3asp_PortType.hh
+SCCP_Mapping.o: MTP3asp_Types.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+SCCP_Mapping.o: /usr/include/string.h /usr/include/iso/string_iso.h
+SCCP_Mapping.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+SCCP_Mapping.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+SCCP_Mapping.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+SCCP_Mapping.o: /usr/include/stdio_impl.h
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+SCCP_Mapping.o: /usr/include/stdlib.h /usr/include/iso/stdlib_iso.h
+SCCP_Mapping.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+SCCP_Mapping.o: /usr/include/sys/time.h /usr/include/sys/types.h
+SCCP_Mapping.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+SCCP_Mapping.o: /usr/include/sys/select.h /usr/include/time.h
+SCCP_Mapping.o: /usr/include/iso/time_iso.h
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+SCCP_Mapping.o: /usr/include/regex.h
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+SCCP_Mapping.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+SCCP_Mapping.o: MTP3asp_PT.hh
+SCCP_Mapping.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+SCCP_Mapping.o: SCCPasp_Types.hh General_Types.hh
+MTP3asp_PT.o: /usr/include/stdio.h /usr/include/iso/stdio_iso.h
+MTP3asp_PT.o: /usr/include/sys/feature_tests.h /usr/include/sys/isa_defs.h
+MTP3asp_PT.o: /usr/include/sys/va_list.h /usr/include/stdio_tag.h
+MTP3asp_PT.o: /usr/include/stdio_impl.h /usr/include/stdlib.h
+MTP3asp_PT.o: /usr/include/iso/stdlib_iso.h /usr/include/sys/types.h
+MTP3asp_PT.o: /usr/include/sys/machtypes.h /usr/include/sys/int_types.h
+MTP3asp_PT.o: /usr/include/sys/select.h /usr/include/sys/time.h
+MTP3asp_PT.o: /usr/include/time.h /usr/include/iso/time_iso.h
+MTP3asp_PT.o: /usr/include/netinet/in.h /usr/include/sys/stream.h
+MTP3asp_PT.o: /usr/include/sys/vnode.h /usr/include/sys/t_lock.h
+MTP3asp_PT.o: /usr/include/sys/machlock.h /usr/include/sys/param.h
+MTP3asp_PT.o: /usr/include/sys/unistd.h /usr/include/sys/mutex.h
+MTP3asp_PT.o: /usr/include/sys/rwlock.h /usr/include/sys/semaphore.h
+MTP3asp_PT.o: /usr/include/sys/condvar.h /usr/include/sys/time_impl.h
+MTP3asp_PT.o: /usr/include/sys/cred.h /usr/include/sys/uio.h
+MTP3asp_PT.o: /usr/include/sys/resource.h /usr/include/vm/seg_enum.h
+MTP3asp_PT.o: /usr/include/sys/poll.h /usr/include/sys/strmdep.h
+MTP3asp_PT.o: /usr/include/sys/model.h /usr/include/sys/strft.h
+MTP3asp_PT.o: /usr/include/sys/byteorder.h /usr/include/netdb.h
+MTP3asp_PT.o: /usr/include/sys/socket.h /usr/include/sys/netconfig.h
+MTP3asp_PT.o: /usr/include/sys/un.h /usr/include/net/if_dl.h
+MTP3asp_PT.o: /usr/include/sys/wait.h /usr/include/sys/siginfo.h
+MTP3asp_PT.o: /usr/include/sys/machsig.h /usr/include/sys/procset.h
+MTP3asp_PT.o: /usr/include/unistd.h /usr/include/arpa/inet.h
+MTP3asp_PT.o: /usr/include/stdarg.h /usr/include/iso/stdarg_iso.h
+MTP3asp_PT.o: /usr/include/string.h /usr/include/iso/string_iso.h
+MTP3asp_PT.o: MTP3asp_PT.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TTCN3.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/version.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Basetype.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Types.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Encdec.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Template.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Integer.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Optional.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/BER.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Logger.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Textbuf.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Error.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Parameters.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Float.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Boolean.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Null.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Objid.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Verdicttype.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Component.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Bitstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/RAW.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Hexstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Octetstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_Any.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Charstring.hh
+MTP3asp_PT.o: /usr/include/regex.h
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Universal_charstring.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Struct_of.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Array.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_CharacterString.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_External.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/ASN_EmbeddedPDV.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Addfunc.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Timer.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Port.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Module_list.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Snapshot.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Default.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/Runtime.hh
+MTP3asp_PT.o: /mnt/projects/TTCN/Releases/TTCNv3-latest/include/TEXT.hh
+MTP3asp_PT.o: /vobs/ttcn/TCC_Releases/Other/SEA_LATEST/include/mphclib.h
+MTP3asp_PT.o: MTP3asp_Types.hh MTP3asp_PortType.hh
diff --git a/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log b/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log
new file mode 100644
index 0000000..b8b3021
--- /dev/null
+++ b/SCCP_CNL113341/demo/N_UNITDATAtest_600longdata_xudt_ansi_log
@@ -0,0 +1,2141 @@
+18:21:32.381643 hc TTCN-3 Host Controller started on duna199.
+18:21:32.385186 hc The address of MC was set to duna199[159.107.196.57]:38400
+18:21:32.387940 hc Connected to MC.
+18:21:41.084400 hc Processing configuration data received from MC.
+18:21:41.161669 hc Module SCCP has the following parameters: tsp_maxLocalReference := 16777216.000000, tsp_max_ConnectionId := 16777216.000000, tsp_force_xudt := 1, tsp_SIF_MaxLength := 272
+18:21:41.162623 hc Module SCCP_selftest has the following parameters: tsp_own_GT := '14377760'H, tsp_remote_GT := '14375760'H, tsp_SSN := 2, tsp_SIO := '83'O, tsp_own_SPC := 16382, tsp_remote_SPC := 16383, tsp_SLS := 0, tsp_sccp_serviceType := "mtp3_ansi"
+18:21:41.163400 hc Module SCCP_typedefs has the following parameters: tspc_timer_T_conn_est := 120.000000, tspc_timer_T_ias := 600.000000, tspc_timer_T_iar := 1260.000000, tspc_timer_T_rel := 20.000000, tspc_timer_T_repeat_rel := 20.000000, tspc_timer_T_int := 60.000000, tspc_timer_T_guard := 1500.000000, tspc_timer_T_reset := 20.000000, tspc_timer_T_internal_reset := 0.000000, tspc_timer_guard := 120.000000
+18:21:41.164026 hc Initializing module MTP3_ASPs.
+18:21:41.164735 hc Initialization of module MTP3_ASPs finished.
+18:21:41.165299 hc Initializing module SCCP.
+18:21:41.166336 hc Initializing module general_typedefs.
+18:21:41.166948 hc Initialization of module general_typedefs finished.
+18:21:41.167549 hc Initializing module SCCP_typedefs.
+18:21:41.168099 hc Initializing module SCCP_ASPs.
+18:21:41.169077 hc Initialization of module SCCP_ASPs finished.
+18:21:41.169895 hc Initialization of module SCCP_typedefs finished.
+18:21:41.171837 hc Initialization of module SCCP finished.
+18:21:41.172467 hc Initializing module SCCP_EncDec.
+18:21:41.173044 hc Initialization of module SCCP_EncDec finished.
+18:21:41.173588 hc Initializing module SCCP_selftest.
+18:21:41.174158 hc Initialization of module SCCP_selftest finished.
+18:21:41.175585 hc Configuration file was processed successfully.
+18:21:41.191379 hc MTC was created. Process id: 25833.
+18:21:41.236537 mtc TTCN-3 Main Test Component started on duna199.
+18:21:41.242045 mtc Connected to MC.
+18:21:45.199426 mtc Executing test case tc_ConnlessSendingShortASP in module SCCP_selftest.
+18:21:45.200795 mtc Test case tc_ConnlessSendingShortASP started.
+18:21:45.201500 mtc Ports of component type MTC_CT were initialized.
+18:21:45.202177 mtc Port PCO_A was started.
+18:21:45.202752 mtc Port PCO_B was started.
+18:21:45.204047 mtc v_Boot: {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+}
+18:21:45.204729 mtc v_BootB: {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+}
+18:21:45.205333 mtc Creating new PTC with component type MTPsim_CT.
+18:21:45.221298 hc PTC was created. Component reference: 3, component type: MTPsim_CT, process id: 25834.
+18:21:45.264675 3 TTCN-3 Parallel Test Component started on duna199. Component reference: 3, component type: MTPsim_CT.
+18:21:45.269726 3 Connected to MC.
+18:21:45.270497 mtc PTC was created. Component reference: 3.
+18:21:45.271118 mtc Creating new PTC with component type SCCP_EncDec_comptype.
+18:21:45.272412 3 Ports of component type MTPsim_CT were initialized.
+18:21:45.274405 3 Port MTP_portA was started.
+18:21:45.275097 3 Port MTP_portB was started.
+18:21:45.309134 hc PTC was created. Component reference: 4, component type: SCCP_EncDec_comptype, process id: 25835.
+18:21:45.349568 4 TTCN-3 Parallel Test Component started on duna199. Component reference: 4, component type: SCCP_EncDec_comptype.
+18:21:45.355068 4 Connected to MC.
+18:21:45.356259 mtc PTC was created. Component reference: 4.
+18:21:45.356923 mtc Creating new PTC with component type SCCP_comptype.
+18:21:45.358309 4 Ports of component type SCCP_EncDec_comptype were initialized.
+18:21:45.359056 4 Port MTP3sccpEncDec_PCO was started.
+18:21:45.359861 4 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered
+18:21:45.360447 4 Port MTP3user_sccp_PCO was started.
+18:21:45.392629 hc PTC was created. Component reference: 5, component type: SCCP_comptype, process id: 25836.
+18:21:45.420667 5 TTCN-3 Parallel Test Component started on duna199. Component reference: 5, component type: SCCP_comptype.
+18:21:45.426421 5 Connected to MC.
+18:21:45.427258 mtc PTC was created. Component reference: 5.
+18:21:45.427896 mtc Connecting ports 4:MTP3user_sccp_PCO and 3:MTP_portA.
+18:21:45.431119 4 Port MTP3user_sccp_PCO is waiting for connection from 3:MTP_portA on TCP port 38406.
+18:21:45.433281 3 Port MTP_portA has established the connection with 4:MTP3user_sccp_PCO.
+18:21:45.435413 mtc Connect operation finished.
+18:21:45.436566 mtc Connecting ports 5:MTP3sccp_PCO and 4:MTP3sccpEncDec_PCO.
+18:21:45.437940 4 Port MTP3user_sccp_PCO has accepted the connection from 3:MTP_portA.
+18:21:45.439013 5 Ports of component type SCCP_comptype were initialized.
+18:21:45.439756 5 Port MTP3sccp_PCO was started.
+18:21:45.440445 5 Port SCCP_PCO was started.
+18:21:45.442861 5 Port MTP3sccp_PCO is waiting for connection from 4:MTP3sccpEncDec_PCO on TCP port 38408.
+18:21:45.445256 4 Port MTP3sccpEncDec_PCO has established the connection with 5:MTP3sccp_PCO.
+18:21:45.463598 mtc Connect operation finished.
+18:21:45.464271 mtc Connecting ports mtc:PCO_A and 5:SCCP_PCO.
+18:21:45.471897 mtc Port PCO_A is waiting for connection from 5:SCCP_PCO on TCP port 38410.
+18:21:45.475092 5 Port MTP3sccp_PCO has accepted the connection from 4:MTP3sccpEncDec_PCO.
+18:21:45.478859 mtc Port PCO_A has accepted the connection from 5:SCCP_PCO.
+18:21:45.479620 mtc Connect operation finished.
+18:21:45.480218 mtc Creating new PTC with component type SCCP_EncDec_comptype.
+18:21:45.481484 5 Port SCCP_PCO has established the connection with mtc:PCO_A.
+18:21:45.515409 hc PTC was created. Component reference: 6, component type: SCCP_EncDec_comptype, process id: 25837.
+18:21:45.536738 6 TTCN-3 Parallel Test Component started on duna199. Component reference: 6, component type: SCCP_EncDec_comptype.
+18:21:45.542075 6 Connected to MC.
+18:21:45.542872 mtc PTC was created. Component reference: 6.
+18:21:45.543505 mtc Creating new PTC with component type SCCP_comptype.
+18:21:45.544857 6 Ports of component type SCCP_EncDec_comptype were initialized.
+18:21:45.545594 6 Port MTP3sccpEncDec_PCO was started.
+18:21:45.547107 6 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered
+18:21:45.547695 6 Port MTP3user_sccp_PCO was started.
+18:21:45.563127 hc PTC was created. Component reference: 7, component type: SCCP_comptype, process id: 25838.
+18:21:45.606608 7 TTCN-3 Parallel Test Component started on duna199. Component reference: 7, component type: SCCP_comptype.
+18:21:45.611933 7 Connected to MC.
+18:21:45.612740 mtc PTC was created. Component reference: 7.
+18:21:45.613371 mtc Connecting ports 6:MTP3user_sccp_PCO and 3:MTP_portB.
+18:21:45.622919 6 Port MTP3user_sccp_PCO is waiting for connection from 3:MTP_portB on TCP port 38414.
+18:21:45.625194 3 Port MTP_portB has established the connection with 6:MTP3user_sccp_PCO.
+18:21:45.628002 mtc Connect operation finished.
+18:21:45.628661 mtc Connecting ports 7:MTP3sccp_PCO and 6:MTP3sccpEncDec_PCO.
+18:21:45.630008 6 Port MTP3user_sccp_PCO has accepted the connection from 3:MTP_portB.
+18:21:45.631064 7 Ports of component type SCCP_comptype were initialized.
+18:21:45.631815 7 Port MTP3sccp_PCO was started.
+18:21:45.632502 7 Port SCCP_PCO was started.
+18:21:45.634990 7 Port MTP3sccp_PCO is waiting for connection from 6:MTP3sccpEncDec_PCO on TCP port 38416.
+18:21:45.654225 6 Port MTP3sccpEncDec_PCO has established the connection with 7:MTP3sccp_PCO.
+18:21:45.657305 mtc Connect operation finished.
+18:21:45.657970 mtc Connecting ports mtc:PCO_B and 7:SCCP_PCO.
+18:21:45.660027 mtc Port PCO_B is waiting for connection from 7:SCCP_PCO on TCP port 38418.
+18:21:45.661448 7 Port MTP3sccp_PCO has accepted the connection from 6:MTP3sccpEncDec_PCO.
+18:21:45.664441 mtc Port PCO_B has accepted the connection from 7:SCCP_PCO.
+18:21:45.665199 mtc Connect operation finished.
+18:21:45.666237 mtc Starting function MTPsim_EventHandler() on component 3.
+18:21:45.667397 mtc Function MTPsim_EventHandler was started.
+18:21:45.668124 mtc Starting function ScanRAWPorts() on component 4.
+18:21:45.669265 mtc Function ScanRAWPorts was started.
+18:21:45.669965 mtc Starting function SCCPStart( {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} ) on component 5.
+18:21:45.671152 mtc Function SCCPStart was started.
+18:21:45.671741 mtc Starting function ScanRAWPorts() on component 6.
+18:21:45.672848 mtc Function ScanRAWPorts was started.
+18:21:45.673470 mtc Starting function SCCPStart( {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} ) on component 7.
+18:21:45.674608 mtc Function SCCPStart was started.
+18:21:45.675177 mtc init() is done
+18:21:45.677985 mtc Start timer: 120 s
+18:21:45.679932 mtc Sent on PCO_A to 5 N_UNITDATA_req {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '12345678901234567890'O,
+    importance := omit
+}
+18:21:45.696998 3 Starting function MTPsim_EventHandler()
+18:21:45.698443 4 Starting function ScanRAWPorts()
+18:21:45.701026 5 Received on SCCP_PCO from mtc N_UNITDATA_req {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '12345678901234567890'O,
+    importance := omit
+} id 1
+18:21:45.702391 5 Starting function SCCPStart( {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} )
+18:21:45.722883 5 v_sccp_pdu_maxlen:265
+18:21:45.725239 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_req.
+18:21:45.726734 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_res.
+18:21:45.727329 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DATA_req.
+18:21:45.727949 5 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DISCONNECT_req.
+18:21:45.728805 5 Message with id 1 was extracted from the queue of SCCP_PCO.
+18:21:45.730071 5 Encoding PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14375760'H
+        }
+    }
+}
+18:21:45.731289 5 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O
+18:21:45.732056 5 Encoding PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14377760'H
+        }
+    }
+}
+18:21:45.732925 5 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O
+18:21:45.734284 5 Random generator was initialized with seed 13.733935.
+18:21:45.735117 5 Function rnd() returned 0.227768.
+18:21:45.737985 5 Sent on MTP3sccp_PCO to 4 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 10,
+                data := '12345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0000'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '1'B,
+                    segmLocalRef := '3A4F07'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+}
+18:21:45.755078 5 Last remaining Segment:'0000'B
+18:21:45.758317 4 Received on MTP3sccpEncDec_PCO from 5 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 10,
+                data := '12345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0000'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '1'B,
+                    segmLocalRef := '3A4F07'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+} id 1
+18:21:45.759685 4 Message with id 1 was extracted from the queue of MTP3sccpEncDec_PCO.
+18:21:45.760414 4 Encoding PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 0,
+        pointer2 := 0,
+        pointer3 := 0,
+        pointer4 := 0,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 10,
+            data := '12345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0000'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '1'B,
+                segmLocalRef := '3A4F07'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:45.782218 4 Encoded PDU_SCCP: '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+18:21:45.783241 4 Sent on MTP3user_sccp_PCO to 3 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+}
+18:21:45.784644 3 Received on MTP_portA from 4 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+} id 1
+18:21:45.785139 3 Message with id 1 was extracted from the queue of MTP_portA.
+18:21:45.786161 3 Sent on MTP_portB to 6 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+}
+18:21:45.787838 6 Received on MTP3user_sccp_PCO from 3 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+} id 1
+18:21:45.788900 6 Starting function ScanRAWPorts()
+18:21:45.789920 6 Message with id 1 was extracted from the queue of MTP3user_sccp_PCO.
+18:21:45.790662 6 Decoding PDU_SCCP: '11000F040F1A240B07FF3F00020772417375060B07FF3F00020772417377060A123456789012345678901004803A4F07'O
+18:21:45.795388 6 Decoded PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 4,
+        pointer2 := 15,
+        pointer3 := 26,
+        pointer4 := 36,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 10,
+            data := '12345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0000'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '1'B,
+                segmLocalRef := '3A4F07'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:45.821005 6 Sent on MTP3sccpEncDec_PCO to 7 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 36,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 10,
+        data := '12345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0000'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '1'B,
+            segmLocalRef := '3A4F07'O
+        },
+        importance := omit
+    },
+    eop := omit
+}
+18:21:45.822432 7 Port SCCP_PCO has established the connection with mtc:PCO_B.
+18:21:45.824903 7 Received on MTP3sccp_PCO from 6 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 36,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 10,
+        data := '12345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0000'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '1'B,
+            segmLocalRef := '3A4F07'O
+        },
+        importance := omit
+    },
+    eop := omit
+} id 1
+18:21:45.845099 7 Starting function SCCPStart( {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} )
+18:21:45.846866 7 v_sccp_pdu_maxlen:265
+18:21:45.849069 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata.
+18:21:45.849964 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService.
+18:21:45.850594 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest.
+18:21:45.851248 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm.
+18:21:45.851881 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released.
+18:21:45.852527 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError.
+18:21:45.853160 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete.
+18:21:45.853741 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest.
+18:21:45.854352 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest.
+18:21:45.873504 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm.
+18:21:45.874250 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused.
+18:21:45.874833 7 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1.
+18:21:45.876205 7 Message with id 1 was extracted from the queue of MTP3sccp_PCO.
+18:21:45.877338 7 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O
+18:21:45.878490 7 Decoded PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14375760'H
+        }
+    }
+}
+18:21:45.879493 7 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O
+18:21:45.880295 7 Decoded PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14377760'H
+        }
+    }
+}
+18:21:45.881403 7 Sent on SCCP_PCO to mtc N_UNITDATA_ind {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '12345678901234567890'O,
+    importance := omit
+}
+18:21:45.900251 mtc Received on PCO_B from 7 N_UNITDATA_ind {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '12345678901234567890'O,
+    importance := omit
+} id 1
+18:21:45.900917 mtc Message with id 1 was extracted from the queue of PCO_B.
+18:21:45.901304 mtc Correct  CalledAddress, CallingAddress and userData received, data are correct
+18:21:45.901623 mtc setverdict(pass): none -> pass
+18:21:45.901959 mtc Stop timer: 120 s
+18:21:45.902282 mtc termitate() started
+18:21:45.902595 mtc Stopping all components.
+18:21:45.907581 3 Stop was requested from MC.
+18:21:45.907937 3 Stopping test component execution.
+18:21:45.940594 3 Function MTPsim_EventHandler was stopped. PTC terminates.
+18:21:45.941545 3 Port MTP_portA was stopped.
+18:21:45.942176 3 Port MTP_portB was stopped.
+18:21:45.943023 3 Removing unterminated connection between ports MTP_portA and 4:MTP3user_sccp_PCO.
+18:21:45.944438 3 Removing unterminated connection between ports MTP_portB and 6:MTP3user_sccp_PCO.
+18:21:45.945612 3 Ports of component type MTPsim_CT were shut down.
+18:21:45.963063 3 getverdict: none
+18:21:45.965312 3 Disconnected from MC.
+18:21:45.965518 3 TTCN-3 Parallel Test Component finished.
+18:21:45.967406 4 Connection of port MTP3user_sccp_PCO to 3:MTP_portA is lost.
+18:21:45.969323 4 Port MTP3user_sccp_PCO was disconnected from 3:MTP_portA.
+18:21:45.970071 4 Stop was requested from MC.
+18:21:45.970686 4 Stopping test component execution.
+18:21:45.997674 4 Function ScanRAWPorts was stopped. PTC terminates.
+18:21:45.998715 4 Port MTP3sccpEncDec_PCO was stopped.
+18:21:45.999329 4 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered
+18:21:45.999934 4 Port MTP3user_sccp_PCO was stopped.
+18:21:46.000781 4 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 5:MTP3sccp_PCO.
+18:21:46.002220 4 Ports of component type SCCP_EncDec_comptype were shut down.
+18:21:46.002866 4 getverdict: none
+18:21:46.004760 4 Disconnected from MC.
+18:21:46.004970 4 TTCN-3 Parallel Test Component finished.
+18:21:46.032470 5 Connection of port MTP3sccp_PCO to 4:MTP3sccpEncDec_PCO is lost.
+18:21:46.033807 5 Port MTP3sccp_PCO was disconnected from 4:MTP3sccpEncDec_PCO.
+18:21:46.034467 5 Stop was requested from MC.
+18:21:46.035074 5 Stopping test component execution.
+18:21:46.051967 5 Function SCCPStart was stopped. PTC terminates.
+18:21:46.052955 5 Port MTP3sccp_PCO was stopped.
+18:21:46.053550 5 Port SCCP_PCO was stopped.
+18:21:46.054596 5 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_A.
+18:21:46.056442 mtc Connection of port PCO_A to 5:SCCP_PCO is lost.
+18:21:46.058014 mtc Port PCO_A was disconnected from 5:SCCP_PCO.
+18:21:46.059058 5 Ports of component type SCCP_comptype were shut down.
+18:21:46.059660 5 getverdict: none
+18:21:46.061555 5 Disconnected from MC.
+18:21:46.061761 5 TTCN-3 Parallel Test Component finished.
+18:21:46.063188 6 Connection of port MTP3user_sccp_PCO to 3:MTP_portB is lost.
+18:21:46.065270 6 Port MTP3user_sccp_PCO was disconnected from 3:MTP_portB.
+18:21:46.067053 6 Stop was requested from MC.
+18:21:46.068350 6 Stopping test component execution.
+18:21:46.115081 6 Function ScanRAWPorts was stopped. PTC terminates.
+18:21:46.116539 6 Port MTP3sccpEncDec_PCO was stopped.
+18:21:46.117177 6 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered
+18:21:46.117788 6 Port MTP3user_sccp_PCO was stopped.
+18:21:46.118635 6 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 7:MTP3sccp_PCO.
+18:21:46.120040 6 Ports of component type SCCP_EncDec_comptype were shut down.
+18:21:46.120672 6 getverdict: none
+18:21:46.122539 6 Disconnected from MC.
+18:21:46.122745 6 TTCN-3 Parallel Test Component finished.
+18:21:46.124069 7 Connection of port MTP3sccp_PCO to 6:MTP3sccpEncDec_PCO is lost.
+18:21:46.126591 7 Port MTP3sccp_PCO was disconnected from 6:MTP3sccpEncDec_PCO.
+18:21:46.127348 7 Stop was requested from MC.
+18:21:46.127955 7 Stopping test component execution.
+18:21:46.152223 7 Function SCCPStart was stopped. PTC terminates.
+18:21:46.153287 7 Port MTP3sccp_PCO was stopped.
+18:21:46.153893 7 Port SCCP_PCO was stopped.
+18:21:46.154936 7 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_B.
+18:21:46.156829 mtc Connection of port PCO_B to 7:SCCP_PCO is lost.
+18:21:46.158368 mtc Port PCO_B was disconnected from 7:SCCP_PCO.
+18:21:46.159390 7 Ports of component type SCCP_comptype were shut down.
+18:21:46.159990 7 getverdict: none
+18:21:46.161049 mtc All components were stopped.
+18:21:46.161673 mtc Disconnecting ports 4:MTP3user_sccp_PCO and 3:MTP_portA.
+18:21:46.162687 mtc Disconnect operation finished.
+18:21:46.163293 mtc Disconnecting ports 5:MTP3sccp_PCO and 4:MTP3sccpEncDec_PCO.
+18:21:46.164303 mtc Disconnect operation finished.
+18:21:46.164908 mtc Disconnecting ports mtc:PCO_A and 5:SCCP_PCO.
+18:21:46.179989 mtc Disconnect operation finished.
+18:21:46.180736 mtc Disconnecting ports 6:MTP3user_sccp_PCO and 3:MTP_portB.
+18:21:46.181756 mtc Disconnect operation finished.
+18:21:46.182361 mtc Disconnecting ports 7:MTP3sccp_PCO and 6:MTP3sccpEncDec_PCO.
+18:21:46.183375 mtc Disconnect operation finished.
+18:21:46.183981 mtc Disconnecting ports mtc:PCO_B and 7:SCCP_PCO.
+18:21:46.184989 mtc Disconnect operation finished.
+18:21:46.185569 mtc  all components stopped
+18:21:46.186455 mtc Stopping test component execution.
+18:21:46.201652 mtc Test case tc_ConnlessSendingShortASP was stopped.
+18:21:46.202665 mtc Port PCO_A was stopped.
+18:21:46.203282 mtc Port PCO_B was stopped.
+18:21:46.205397 mtc Ports of component type MTC_CT were shut down.
+18:21:46.207477 7 Disconnected from MC.
+18:21:46.207705 7 TTCN-3 Parallel Test Component finished.
+18:21:46.208587 mtc Waiting for PTCs to finish.
+18:21:46.209933 mtc Setting final verdict of the test case.
+18:21:46.211165 mtc Local verdict of MTC: pass
+18:21:46.211855 mtc Local verdict of PTC with component reference 3: none (pass -> pass)
+18:21:46.212456 mtc Local verdict of PTC with component reference 4: none (pass -> pass)
+18:21:46.213073 mtc Local verdict of PTC with component reference 5: none (pass -> pass)
+18:21:46.213661 mtc Local verdict of PTC with component reference 6: none (pass -> pass)
+18:21:46.214802 mtc Local verdict of PTC with component reference 7: none (pass -> pass)
+18:21:46.215478 mtc Test case tc_ConnlessSendingShortASP finished. Verdict: pass
+18:21:46.217171 mtc Executing test case tc_ConnlessSendingLongASP in module SCCP_selftest.
+18:21:46.240225 mtc Test case tc_ConnlessSendingLongASP started.
+18:21:46.240961 mtc Ports of component type MTC_CT were initialized.
+18:21:46.241578 mtc Port PCO_A was started.
+18:21:46.242161 mtc Port PCO_B was started.
+18:21:46.242817 mtc v_Boot: {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+}
+18:21:46.243457 mtc v_BootB: {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+}
+18:21:46.244084 mtc Creating new PTC with component type MTPsim_CT.
+18:21:46.245603 hc Test component with component reference 7 finished. Process statistics: {
+    process id: 25838,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.020000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:21:46.246717 hc Test component with component reference 6 finished. Process statistics: {
+    process id: 25837,
+    exit status: 0,
+    user time: 0.050000 s,
+    system time: 0.030000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:21:46.247491 hc Test component with component reference 5 finished. Process statistics: {
+    process id: 25836,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.030000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:21:46.264668 hc Test component with component reference 4 finished. Process statistics: {
+    process id: 25835,
+    exit status: 0,
+    user time: 0.040000 s,
+    system time: 0.030000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:21:46.265568 hc Test component with component reference 3 finished. Process statistics: {
+    process id: 25834,
+    exit status: 0,
+    user time: 0.050000 s,
+    system time: 0.020000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:21:46.280706 hc PTC was created. Component reference: 8, component type: MTPsim_CT, process id: 25839.
+18:21:46.327713 8 TTCN-3 Parallel Test Component started on duna199. Component reference: 8, component type: MTPsim_CT.
+18:21:46.333051 8 Connected to MC.
+18:21:46.333975 8 Ports of component type MTPsim_CT were initialized.
+18:21:46.334733 8 Port MTP_portA was started.
+18:21:46.335352 8 Port MTP_portB was started.
+18:21:46.336555 mtc PTC was created. Component reference: 8.
+18:21:46.337460 mtc Creating new PTC with component type SCCP_EncDec_comptype.
+18:21:46.353606 hc PTC was created. Component reference: 9, component type: SCCP_EncDec_comptype, process id: 25840.
+18:21:46.398779 9 TTCN-3 Parallel Test Component started on duna199. Component reference: 9, component type: SCCP_EncDec_comptype.
+18:21:46.404037 9 Connected to MC.
+18:21:46.404841 mtc PTC was created. Component reference: 9.
+18:21:46.405504 mtc Creating new PTC with component type SCCP_comptype.
+18:21:46.407469 9 Ports of component type SCCP_EncDec_comptype were initialized.
+18:21:46.408208 9 Port MTP3sccpEncDec_PCO was started.
+18:21:46.409009 9 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered
+18:21:46.409590 9 Port MTP3user_sccp_PCO was started.
+18:21:46.424385 hc PTC was created. Component reference: 10, component type: SCCP_comptype, process id: 25841.
+18:21:46.468205 10 TTCN-3 Parallel Test Component started on duna199. Component reference: 10, component type: SCCP_comptype.
+18:21:46.473262 10 Connected to MC.
+18:21:46.474045 mtc PTC was created. Component reference: 10.
+18:21:46.474720 mtc Connecting ports 9:MTP3user_sccp_PCO and 8:MTP_portA.
+18:21:46.478439 9 Port MTP3user_sccp_PCO is waiting for connection from 8:MTP_portA on TCP port 38423.
+18:21:46.480561 8 Port MTP_portA has established the connection with 9:MTP3user_sccp_PCO.
+18:21:46.482674 mtc Connect operation finished.
+18:21:46.483347 mtc Connecting ports 10:MTP3sccp_PCO and 9:MTP3sccpEncDec_PCO.
+18:21:46.484727 9 Port MTP3user_sccp_PCO has accepted the connection from 8:MTP_portA.
+18:21:46.486409 10 Ports of component type SCCP_comptype were initialized.
+18:21:46.487183 10 Port MTP3sccp_PCO was started.
+18:21:46.487857 10 Port SCCP_PCO was started.
+18:21:46.490270 10 Port MTP3sccp_PCO is waiting for connection from 9:MTP3sccpEncDec_PCO on TCP port 38425.
+18:21:46.492618 9 Port MTP3sccpEncDec_PCO has established the connection with 10:MTP3sccp_PCO.
+18:21:46.494771 mtc Connect operation finished.
+18:21:46.495446 mtc Connecting ports mtc:PCO_A and 10:SCCP_PCO.
+18:21:46.497895 mtc Port PCO_A is waiting for connection from 10:SCCP_PCO on TCP port 38427.
+18:21:46.499342 10 Port MTP3sccp_PCO has accepted the connection from 9:MTP3sccpEncDec_PCO.
+18:21:46.501885 mtc Port PCO_A has accepted the connection from 10:SCCP_PCO.
+18:21:46.502633 mtc Connect operation finished.
+18:21:46.503254 mtc Creating new PTC with component type SCCP_EncDec_comptype.
+18:21:46.504536 10 Port SCCP_PCO has established the connection with mtc:PCO_A.
+18:21:46.535166 hc PTC was created. Component reference: 11, component type: SCCP_EncDec_comptype, process id: 25842.
+18:21:46.563650 11 TTCN-3 Parallel Test Component started on duna199. Component reference: 11, component type: SCCP_EncDec_comptype.
+18:21:46.569136 11 Connected to MC.
+18:21:46.569930 mtc PTC was created. Component reference: 11.
+18:21:46.570585 mtc Creating new PTC with component type SCCP_comptype.
+18:21:46.572003 11 Ports of component type SCCP_EncDec_comptype were initialized.
+18:21:46.572757 11 Port MTP3sccpEncDec_PCO was started.
+18:21:46.573568 11 MTP3 Test Port (MTP3user_sccp_PCO): user start ordered
+18:21:46.574160 11 Port MTP3user_sccp_PCO was started.
+18:21:46.607218 hc PTC was created. Component reference: 12, component type: SCCP_comptype, process id: 25843.
+18:21:46.634527 12 TTCN-3 Parallel Test Component started on duna199. Component reference: 12, component type: SCCP_comptype.
+18:21:46.640248 12 Connected to MC.
+18:21:46.641259 mtc PTC was created. Component reference: 12.
+18:21:46.641935 mtc Connecting ports 11:MTP3user_sccp_PCO and 8:MTP_portB.
+18:21:46.645205 11 Port MTP3user_sccp_PCO is waiting for connection from 8:MTP_portB on TCP port 38431.
+18:21:46.647813 8 Port MTP_portB has established the connection with 11:MTP3user_sccp_PCO.
+18:21:46.650037 mtc Connect operation finished.
+18:21:46.650705 mtc Connecting ports 12:MTP3sccp_PCO and 11:MTP3sccpEncDec_PCO.
+18:21:46.652085 11 Port MTP3user_sccp_PCO has accepted the connection from 8:MTP_portB.
+18:21:46.653166 12 Ports of component type SCCP_comptype were initialized.
+18:21:46.653902 12 Port MTP3sccp_PCO was started.
+18:21:46.654568 12 Port SCCP_PCO was started.
+18:21:46.674133 12 Port MTP3sccp_PCO is waiting for connection from 11:MTP3sccpEncDec_PCO on TCP port 38433.
+18:21:46.677229 11 Port MTP3sccpEncDec_PCO has established the connection with 12:MTP3sccp_PCO.
+18:21:46.679496 mtc Connect operation finished.
+18:21:46.680172 mtc Connecting ports mtc:PCO_B and 12:SCCP_PCO.
+18:21:46.682231 mtc Port PCO_B is waiting for connection from 12:SCCP_PCO on TCP port 38435.
+18:21:46.683671 12 Port MTP3sccp_PCO has accepted the connection from 11:MTP3sccpEncDec_PCO.
+18:21:46.687028 mtc Port PCO_B has accepted the connection from 12:SCCP_PCO.
+18:21:46.687831 mtc Connect operation finished.
+18:21:46.688466 mtc Starting function MTPsim_EventHandler() on component 8.
+18:21:46.689847 8 Starting function MTPsim_EventHandler()
+18:21:46.690910 mtc Function MTPsim_EventHandler was started.
+18:21:46.691559 mtc Starting function ScanRAWPorts() on component 9.
+18:21:46.692675 mtc Function ScanRAWPorts was started.
+18:21:46.693326 mtc Starting function SCCPStart( {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} ) on component 10.
+18:21:46.694511 mtc Function SCCPStart was started.
+18:21:46.695121 mtc Starting function ScanRAWPorts() on component 11.
+18:21:46.696900 mtc Function ScanRAWPorts was started.
+18:21:46.697568 mtc Starting function SCCPStart( {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} ) on component 12.
+18:21:46.698723 mtc Function SCCPStart was started.
+18:21:46.699310 mtc init() is done
+18:21:46.700287 mtc Start timer: 120 s
+18:21:46.701466 mtc Sent on PCO_A to 10 N_UNITDATA_req {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O,
+    importance := omit
+}
+18:21:46.718626 9 Starting function ScanRAWPorts()
+18:21:46.721380 10 Received on SCCP_PCO from mtc N_UNITDATA_req {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O,
+    importance := omit
+} id 1
+18:21:46.742310 10 Starting function SCCPStart( {
+    own_GT := '14377760'H,
+    remote_GT := '14375760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16382,
+    remote_SPC := 16383,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} )
+18:21:46.743647 10 v_sccp_pdu_maxlen:265
+18:21:46.746564 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_req.
+18:21:46.747527 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_CONNECT_res.
+18:21:46.748104 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DATA_req.
+18:21:46.766884 10 Receive operation on port SCCP_PCO failed: Type of the first message in the queue is not N_DISCONNECT_req.
+18:21:46.767864 10 Message with id 1 was extracted from the queue of SCCP_PCO.
+18:21:46.769126 10 Encoding PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14375760'H
+        }
+    }
+}
+18:21:46.770337 10 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O
+18:21:46.771120 10 Encoding PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14377760'H
+        }
+    }
+}
+18:21:46.771979 10 Encoded PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O
+18:21:46.773573 10 Random generator was initialized with seed 14.773216.
+18:21:46.774419 10 Function rnd() returned 0.171705.
+18:21:46.777342 10 Sent on MTP3sccp_PCO to 9 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 225,
+                data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0001'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '1'B,
+                    segmLocalRef := '2BF4DA'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+}
+18:21:46.797926 9 Received on MTP3sccpEncDec_PCO from 10 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 225,
+                data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0001'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '1'B,
+                    segmLocalRef := '2BF4DA'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+} id 1
+18:21:46.818423 9 Message with id 1 was extracted from the queue of MTP3sccpEncDec_PCO.
+18:21:46.819292 9 Encoding PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 0,
+        pointer2 := 0,
+        pointer3 := 0,
+        pointer4 := 0,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 225,
+            data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0001'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '1'B,
+                segmLocalRef := '2BF4DA'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:46.840033 9 Encoded PDU_SCCP: '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+18:21:46.841117 9 Sent on MTP3user_sccp_PCO to 8 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+}
+18:21:46.860927 8 Received on MTP_portA from 9 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+} id 1
+18:21:46.861875 8 Message with id 1 was extracted from the queue of MTP_portA.
+18:21:46.862805 8 Sent on MTP_portB to 11 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+}
+18:21:46.864468 10 Sent on MTP3sccp_PCO to 9 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 75,
+                data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0000'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '0'B,
+                    segmLocalRef := '2BF4DA'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+}
+18:21:46.884418 9 Received on MTP3sccpEncDec_PCO from 10 ASP_MTP3_TRANSFERreq_sccp {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := {
+        extudata := {
+            messageType := xudt (17),
+            protClass := {
+                class := '0000'B,
+                messageHandling := '0000'B
+            },
+            hopCounter := 15,
+            pointer1 := 0,
+            pointer2 := 0,
+            pointer3 := 0,
+            pointer4 := 0,
+            calledPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737506'O
+            },
+            callingPAddress := {
+                paramLength := 11,
+                addr := '07FF3F0002077241737706'O
+            },
+            data := {
+                paramLength := 75,
+                data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+            },
+            optionalPart := {
+                segmentation := {
+                    paramName := con_SCCP_segm (16),
+                    paramLength := 4,
+                    remainingSegment := '0000'B,
+                    reserved := '00'B,
+                    class := '0'B,
+                    firstSegm := '0'B,
+                    segmLocalRef := '2BF4DA'O
+                },
+                importance := omit
+            },
+            eop := omit
+        }
+    }
+} id 2
+18:21:46.885361 9 Message with id 2 was extracted from the queue of MTP3sccpEncDec_PCO.
+18:21:46.886556 9 Encoding PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 0,
+        pointer2 := 0,
+        pointer3 := 0,
+        pointer4 := 0,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 75,
+            data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0000'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '0'B,
+                segmLocalRef := '2BF4DA'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:46.905406 9 Encoded PDU_SCCP: '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+18:21:46.906838 9 Sent on MTP3user_sccp_PCO to 8 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+}
+18:21:46.907795 8 Received on MTP_portA from 9 ASP_MTP3_TRANSFERreq {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+} id 2
+18:21:46.908539 8 Message with id 2 was extracted from the queue of MTP_portA.
+18:21:46.909214 8 Sent on MTP_portB to 11 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+}
+18:21:46.928654 10 Last remaining Segment:'0000'B
+18:21:46.930294 11 Received on MTP3user_sccp_PCO from 8 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+} id 1
+18:21:46.931267 11 Received on MTP3user_sccp_PCO from 8 ASP_MTP3_TRANSFERind {
+    sio := '83'O,
+    opc := 16382,
+    dpc := 16383,
+    sls := 0,
+    data := '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+} id 2
+18:21:46.932508 11 Starting function ScanRAWPorts()
+18:21:46.933526 11 Message with id 1 was extracted from the queue of MTP3user_sccp_PCO.
+18:21:46.934374 11 Decoding PDU_SCCP: '11000F040F1AFB0B07FF3F00020772417375060B07FF3F0002077241737706E11234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004812BF4DA'O
+18:21:46.958297 11 Decoded PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 4,
+        pointer2 := 15,
+        pointer3 := 26,
+        pointer4 := 251,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 225,
+            data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0001'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '1'B,
+                segmLocalRef := '2BF4DA'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:46.960010 11 Sent on MTP3sccpEncDec_PCO to 12 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 251,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 225,
+        data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0001'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '1'B,
+            segmLocalRef := '2BF4DA'O
+        },
+        importance := omit
+    },
+    eop := omit
+}
+18:21:46.979542 11 Message with id 2 was extracted from the queue of MTP3user_sccp_PCO.
+18:21:46.980311 11 Decoding PDU_SCCP: '11000F040F1A650B07FF3F00020772417375060B07FF3F00020772417377064B1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901004002BF4DA'O
+18:21:46.982225 11 Decoded PDU_SCCP: {
+    extudata := {
+        messageType := xudt (17),
+        protClass := {
+            class := '0000'B,
+            messageHandling := '0000'B
+        },
+        hopCounter := 15,
+        pointer1 := 4,
+        pointer2 := 15,
+        pointer3 := 26,
+        pointer4 := 101,
+        calledPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737506'O
+        },
+        callingPAddress := {
+            paramLength := 11,
+            addr := '07FF3F0002077241737706'O
+        },
+        data := {
+            paramLength := 75,
+            data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+        },
+        optionalPart := {
+            segmentation := {
+                paramName := con_SCCP_segm (16),
+                paramLength := 4,
+                remainingSegment := '0000'B,
+                reserved := '00'B,
+                class := '0'B,
+                firstSegm := '0'B,
+                segmLocalRef := '2BF4DA'O
+            },
+            importance := omit
+        },
+        eop := omit
+    }
+}
+18:21:47.002800 11 Sent on MTP3sccpEncDec_PCO to 12 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 101,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 75,
+        data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0000'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '0'B,
+            segmLocalRef := '2BF4DA'O
+        },
+        importance := omit
+    },
+    eop := omit
+}
+18:21:47.004232 12 Port SCCP_PCO has established the connection with mtc:PCO_B.
+18:21:47.007365 12 Received on MTP3sccp_PCO from 11 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 251,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 225,
+        data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0001'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '1'B,
+            segmLocalRef := '2BF4DA'O
+        },
+        importance := omit
+    },
+    eop := omit
+} id 1
+18:21:47.027803 12 Received on MTP3sccp_PCO from 11 PDU_SCCP_ExtUnitdata {
+    messageType := xudt (17),
+    protClass := {
+        class := '0000'B,
+        messageHandling := '0000'B
+    },
+    hopCounter := 15,
+    pointer1 := 4,
+    pointer2 := 15,
+    pointer3 := 26,
+    pointer4 := 101,
+    calledPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737506'O
+    },
+    callingPAddress := {
+        paramLength := 11,
+        addr := '07FF3F0002077241737706'O
+    },
+    data := {
+        paramLength := 75,
+        data := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O
+    },
+    optionalPart := {
+        segmentation := {
+            paramName := con_SCCP_segm (16),
+            paramLength := 4,
+            remainingSegment := '0000'B,
+            reserved := '00'B,
+            class := '0'B,
+            firstSegm := '0'B,
+            segmLocalRef := '2BF4DA'O
+        },
+        importance := omit
+    },
+    eop := omit
+} id 2
+18:21:47.029096 12 Starting function SCCPStart( {
+    own_GT := '14375760'H,
+    remote_GT := '14377760'H,
+    SSN := 2,
+    SIO := '83'O,
+    own_SPC := 16383,
+    remote_SPC := 16382,
+    SLS := 0,
+    sccp_serviceType := "mtp3_ansi"
+} )
+18:21:47.049950 12 v_sccp_pdu_maxlen:265
+18:21:47.052171 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata.
+18:21:47.053061 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService.
+18:21:47.053634 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest.
+18:21:47.054301 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm.
+18:21:47.054874 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released.
+18:21:47.055523 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError.
+18:21:47.056867 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete.
+18:21:47.057484 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest.
+18:21:47.058038 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest.
+18:21:47.058620 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm.
+18:21:47.059177 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused.
+18:21:47.059766 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1.
+18:21:47.060612 12 Message with id 1 was extracted from the queue of MTP3sccp_PCO.
+18:21:47.061431 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Unitdata.
+18:21:47.062036 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_UnitdataService.
+18:21:47.080392 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRequest.
+18:21:47.081093 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionConfirm.
+18:21:47.081697 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_Released.
+18:21:47.082255 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ProtDataUnitError.
+18:21:47.082850 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ReleaseComplete.
+18:21:47.083413 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_InactivityTest.
+18:21:47.083998 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetRequest.
+18:21:47.084553 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ResetConfirm.
+18:21:47.085145 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_ConnectionRefused.
+18:21:47.085972 12 Receive operation on port MTP3sccp_PCO failed: Type of the first message in the queue is not PDU_SCCP_DataForm1.
+18:21:47.086667 12 Message with id 2 was extracted from the queue of MTP3sccp_PCO.
+18:21:47.087691 12 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737506'O
+18:21:47.088831 12 Decoded PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14375760'H
+        }
+    }
+}
+18:21:47.089819 12 Decoding PDU_SCCP_Address_ansi: '07FF3F0002077241737706'O
+18:21:47.096495 12 Decoded PDU_SCCP_Address_ansi: {
+    addressIndicator := {
+        ssnIndicator := '1'B,
+        pointCodeIndic := '1'B,
+        globalTitleIndic := '0001'B,
+        routingIndicator := '0'B,
+        reserved := '0'B
+    },
+    signPointCode := {
+        present := '000000000011111111111111'B
+    },
+    subsystemNumber := {
+        present := 2
+    },
+    globalTitle := {
+        gti0001 := {
+            translationType := '07'O,
+            encodingScheme := '0010'B,
+            numberingPlan := '0111'B,
+            globalTitleAddress := '14377760'H
+        }
+    }
+}
+18:21:47.097820 12 Sent on SCCP_PCO to mtc N_UNITDATA_ind {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O,
+    importance := omit
+}
+18:21:47.099690 mtc Received on PCO_B from 12 N_UNITDATA_ind {
+    calledAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14375760'H
+            }
+        }
+    },
+    callingAddress := {
+        addressIndicator := {
+            pointCodeIndic := '1'B,
+            ssnIndicator := '1'B,
+            globalTitleIndic := '0001'B,
+            routingIndicator := '0'B
+        },
+        signPointCode := '000000000011111111111111'B,
+        subsystemNumber := 2,
+        globalTitle := {
+            gti0011 := {
+                translationType := '07'O,
+                encodingScheme := '0010'B,
+                numberingPlan := '0111'B,
+                globalTitleAddress := '14377760'H
+            }
+        }
+    },
+    sequenceControl := '00000000'B,
+    returnOption := '00000000'B,
+    userData := '123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'O,
+    importance := omit
+} id 1
+18:21:47.101242 mtc Message with id 1 was extracted from the queue of PCO_B.
+18:21:47.101965 mtc Correct  CalledAddress, CallingAddress and userData received, data are correct
+18:21:47.102580 mtc setverdict(pass): none -> pass
+18:21:47.103230 mtc Stop timer: 120 s
+18:21:47.103850 mtc termitate() started
+18:21:47.104464 mtc Stopping all components.
+18:21:47.106496 8 Stop was requested from MC.
+18:21:47.107164 8 Stopping test component execution.
+18:21:47.123129 8 Function MTPsim_EventHandler was stopped. PTC terminates.
+18:21:47.124103 8 Port MTP_portA was stopped.
+18:21:47.124749 8 Port MTP_portB was stopped.
+18:21:47.125610 8 Removing unterminated connection between ports MTP_portA and 9:MTP3user_sccp_PCO.
+18:21:47.127704 8 Removing unterminated connection between ports MTP_portB and 11:MTP3user_sccp_PCO.
+18:21:47.128884 8 Ports of component type MTPsim_CT were shut down.
+18:21:47.129510 8 getverdict: none
+18:21:47.131756 8 Disconnected from MC.
+18:21:47.131976 8 TTCN-3 Parallel Test Component finished.
+18:21:47.133209 9 Connection of port MTP3user_sccp_PCO to 8:MTP_portA is lost.
+18:21:47.135184 9 Port MTP3user_sccp_PCO was disconnected from 8:MTP_portA.
+18:21:47.136358 9 Stop was requested from MC.
+18:21:47.137032 9 Stopping test component execution.
+18:21:47.162489 9 Function ScanRAWPorts was stopped. PTC terminates.
+18:21:47.163557 9 Port MTP3sccpEncDec_PCO was stopped.
+18:21:47.164160 9 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered
+18:21:47.164766 9 Port MTP3user_sccp_PCO was stopped.
+18:21:47.165617 9 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 10:MTP3sccp_PCO.
+18:21:47.167692 9 Ports of component type SCCP_EncDec_comptype were shut down.
+18:21:47.168343 9 getverdict: none
+18:21:47.170258 9 Disconnected from MC.
+18:21:47.170470 9 TTCN-3 Parallel Test Component finished.
+18:21:47.171868 10 Connection of port MTP3sccp_PCO to 9:MTP3sccpEncDec_PCO is lost.
+18:21:47.173933 10 Port MTP3sccp_PCO was disconnected from 9:MTP3sccpEncDec_PCO.
+18:21:47.174646 10 Stop was requested from MC.
+18:21:47.175246 10 Stopping test component execution.
+18:21:47.200504 10 Function SCCPStart was stopped. PTC terminates.
+18:21:47.201545 10 Port MTP3sccp_PCO was stopped.
+18:21:47.202136 10 Port SCCP_PCO was stopped.
+18:21:47.203172 10 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_A.
+18:21:47.204521 mtc Connection of port PCO_A to 10:SCCP_PCO is lost.
+18:21:47.206622 mtc Port PCO_A was disconnected from 10:SCCP_PCO.
+18:21:47.207704 10 Ports of component type SCCP_comptype were shut down.
+18:21:47.208293 10 getverdict: none
+18:21:47.210197 10 Disconnected from MC.
+18:21:47.210401 10 TTCN-3 Parallel Test Component finished.
+18:21:47.211716 11 Connection of port MTP3user_sccp_PCO to 8:MTP_portB is lost.
+18:21:47.213172 11 Port MTP3user_sccp_PCO was disconnected from 8:MTP_portB.
+18:21:47.214488 11 Stop was requested from MC.
+18:21:47.215141 11 Stopping test component execution.
+18:21:47.240282 11 Function ScanRAWPorts was stopped. PTC terminates.
+18:21:47.241361 11 Port MTP3sccpEncDec_PCO was stopped.
+18:21:47.241973 11 MTP3 Test Port (MTP3user_sccp_PCO): User stop ordered
+18:21:47.242584 11 Port MTP3user_sccp_PCO was stopped.
+18:21:47.243436 11 Removing unterminated connection between ports MTP3sccpEncDec_PCO and 12:MTP3sccp_PCO.
+18:21:47.244858 11 Ports of component type SCCP_EncDec_comptype were shut down.
+18:21:47.245503 11 getverdict: none
+18:21:47.247937 11 Disconnected from MC.
+18:21:47.248146 11 TTCN-3 Parallel Test Component finished.
+18:21:47.249639 12 Connection of port MTP3sccp_PCO to 11:MTP3sccpEncDec_PCO is lost.
+18:21:47.251689 12 Port MTP3sccp_PCO was disconnected from 11:MTP3sccpEncDec_PCO.
+18:21:47.252406 12 Stop was requested from MC.
+18:21:47.252990 12 Stopping test component execution.
+18:21:47.344052 12 Function SCCPStart was stopped. PTC terminates.
+18:21:47.345109 12 Port MTP3sccp_PCO was stopped.
+18:21:47.346393 12 Port SCCP_PCO was stopped.
+18:21:47.347503 12 Removing unterminated connection between ports SCCP_PCO and mtc:PCO_B.
+18:21:47.348853 mtc Connection of port PCO_B to 12:SCCP_PCO is lost.
+18:21:47.350357 mtc Port PCO_B was disconnected from 12:SCCP_PCO.
+18:21:47.351354 12 Ports of component type SCCP_comptype were shut down.
+18:21:47.351934 12 getverdict: none
+18:21:47.352955 mtc All components were stopped.
+18:21:47.353582 mtc Disconnecting ports 9:MTP3user_sccp_PCO and 8:MTP_portA.
+18:21:47.354590 mtc Disconnect operation finished.
+18:21:47.355197 mtc Disconnecting ports 10:MTP3sccp_PCO and 9:MTP3sccpEncDec_PCO.
+18:21:47.356662 mtc Disconnect operation finished.
+18:21:47.357283 mtc Disconnecting ports mtc:PCO_A and 10:SCCP_PCO.
+18:21:47.358282 mtc Disconnect operation finished.
+18:21:47.358890 mtc Disconnecting ports 11:MTP3user_sccp_PCO and 8:MTP_portB.
+18:21:47.359898 mtc Disconnect operation finished.
+18:21:47.360508 mtc Disconnecting ports 12:MTP3sccp_PCO and 11:MTP3sccpEncDec_PCO.
+18:21:47.361519 mtc Disconnect operation finished.
+18:21:47.362127 mtc Disconnecting ports mtc:PCO_B and 12:SCCP_PCO.
+18:21:47.363126 mtc Disconnect operation finished.
+18:21:47.363708 mtc  all components stopped
+18:21:47.364307 mtc Stopping test component execution.
+18:21:47.365131 mtc Test case tc_ConnlessSendingLongASP was stopped.
+18:21:47.366208 mtc Port PCO_A was stopped.
+18:21:47.366555 mtc Port PCO_B was stopped.
+18:21:47.368393 mtc Ports of component type MTC_CT were shut down.
+18:21:47.368667 mtc Waiting for PTCs to finish.
+18:21:47.370662 mtc Setting final verdict of the test case.
+18:21:47.371019 mtc Local verdict of MTC: pass
+18:21:47.371339 mtc Local verdict of PTC with component reference 8: none (pass -> pass)
+18:21:47.371635 mtc Local verdict of PTC with component reference 9: none (pass -> pass)
+18:21:47.371948 mtc Local verdict of PTC with component reference 10: none (pass -> pass)
+18:21:47.372245 mtc Local verdict of PTC with component reference 11: none (pass -> pass)
+18:21:47.372560 mtc Local verdict of PTC with component reference 12: none (pass -> pass)
+18:21:47.372855 mtc Test case tc_ConnlessSendingLongASP finished. Verdict: pass
+18:21:47.402761 12 Disconnected from MC.
+18:21:47.402997 12 TTCN-3 Parallel Test Component finished.
+18:22:04.264666 mtc Verdict statistics: 0 none (0.00 %), 2 pass (100.00 %), 0 inconc (0.00 %), 0 fail (0.00 %), 0 error (0.00 %).
+18:22:04.265451 mtc Test execution summary: 2 test cases were executed. Overall verdict: pass.
+18:22:04.266260 mtc Exit was requested from MC. Terminating MTC.
+18:22:04.269127 mtc Disconnected from MC.
+18:22:04.269382 mtc TTCN-3 Main Test Component finished.
+18:22:04.270509 hc Test component with component reference 12 finished. Process statistics: {
+    process id: 25843,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.070000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.271775 hc Test component with component reference 11 finished. Process statistics: {
+    process id: 25842,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.030000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.272732 hc Test component with component reference 10 finished. Process statistics: {
+    process id: 25841,
+    exit status: 0,
+    user time: 0.010000 s,
+    system time: 0.040000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.274094 hc Test component with component reference 9 finished. Process statistics: {
+    process id: 25840,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.020000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.301155 hc Test component with component reference 1 finished. Process statistics: {
+    process id: 25833,
+    exit status: 0,
+    user time: 0.050000 s,
+    system time: 0.100000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.302181 hc Test component with component reference 8 finished. Process statistics: {
+    process id: 25839,
+    exit status: 0,
+    user time: 0.020000 s,
+    system time: 0.030000 s,
+    maximum resident set size: 0,
+    integral resident set size: 0,
+    page faults not requiring physical I/O: 0,
+    page faults requiring physical I/O: 0,
+    swaps: 0,
+    block input operations: 0,
+    block output operations 0,
+    messages sent: 0,
+    messages received: 0,
+    signals received: 0,
+    voluntary context switches: 0,
+    involuntary context switches: 0
+}
+18:22:04.303133 hc Exit was requested from MC. Terminating HC.
+18:22:04.314953 hc Disconnected from MC.
+18:22:04.315230 hc TTCN-3 Host Controller finished on duna199.
diff --git a/SCCP_CNL113341/demo/SCCP_Emulation.ttcn b/SCCP_CNL113341/demo/SCCP_Emulation.ttcn
new file mode 120000
index 0000000..fae9605
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Emulation.ttcn
@@ -0,0 +1 @@
+../src/SCCP_Emulation.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp b/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp
new file mode 120000
index 0000000..aabd0d4
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Mapping.ttcnpp
@@ -0,0 +1 @@
+../src/SCCP_Mapping.ttcnpp
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/SCCP_Testcases.cfg b/SCCP_CNL113341/demo/SCCP_Testcases.cfg
new file mode 100644
index 0000000..ae1c472
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Testcases.cfg
@@ -0,0 +1,55 @@
+[LOGGING]
+#FileName := "SCCP_selftest.cfg"
+FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+#ConsoleMask := LOG_ALL
+#ConsoleMask := TTCN_TESTCASE | TTCN_PORTEVENT | TTCN_DEBUG | TTCN_MATCHING 
+#ConsoleMask :=  TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT
+#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING 
+LogSourceInfo := Yes
+
+[EXECUTE]
+#SCCP_selftest.tc_ConnlessSendingShortASP
+#SCCP_selftest.tc_ConnlessSendingLongASP
+#SCCP_selftest.tc_ConnOrientedShortASPSending
+#SCCP_Testcases.tc_ConnlessSendingLongASP
+SCCP_Testcases.tc_ConnOrientedShortASPSending
+
+[TESTPORT_PARAMETERS]
+// *******************************************************
+// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA *
+// *******************************************************
+system.*.Hostname := "karasea"  //sea server name
+system.*.HttpPort := "5001"   //sea http port
+system.*.IID_String := "b303d76a-266c-11d4-b8f5-08002090d3da"
+                              //Device Type ID
+system.*.Loop:= "OFF"
+system.*.Filter:= "OFF"
+system.*.MTP3ServiceType := "MTP3ttc" // ["MTP3itu" (default)|"MTP3ansi" | "M3UA" |"MTP3tcc]
+
+// CMGW6 -> SCTP_ASSOC_10.2.110.102
+// CMGW3 data: SCTP_ASSOC_10.2.110.2
+system.CMGW6.EntityName := "SAALH-0" //"S7ST-0" //device name to connect
+system.CMGW6.NI         :=  "2"
+system.CMGW6.SUT_Pc     := "2300"
+system.CMGW6.TESTER_Pc  := "2351"
+system.CMGW6.M3UA_version:= "1"
+ 
+[MODULE_PARAMETERS]
+tsp_own_GT := '14377760'H
+tsp_remote_GT := '14375760'H
+tsp_SSN := 8 //8:MSC 5:MAP see 3.4.2.2/Q.713
+tsp_SIO := '83'O //SCCP national
+tsp_own_SPC := 2351
+tsp_remote_SPC := 2300// max value on 14 bits
+tsp_SLS := 0
+#[tsp_sccp_serviceType := "mtp3_itu" |"mtp3b_itu"|"mtp3_ansi"|"mtp3b_ansi"|  "mtp3b_tcc"]
+tsp_sccp_serviceType := "mtp3_ttc"
+
+#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 :
+#tsp_translationType := 7
+tsp_SIF_MaxLength := 272
+tsp_force_xudt := 0 // 1:yes, 0:no 
+
+[MAIN_CONTROLLER]
+TCPPort := 7145
+NumHCs := 1
diff --git a/SCCP_CNL113341/demo/SCCP_Testcases.ttcn b/SCCP_CNL113341/demo/SCCP_Testcases.ttcn
new file mode 100644
index 0000000..0f8ba47
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Testcases.ttcn
@@ -0,0 +1,468 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+// Copyright Test Competence Center (TCC) ETH 2007
+//
+//
+//
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File: 		    SCCP_TestCases.ttcn
+//  Description:  SS7 SCCP basic SEA test
+//                according to specification ITU-T SS7 SCCP, ANSI ..., TCC ... 
+//  References:   ITU-T: Recommendation Q.711-Q.714, 
+//                ANSI  T1.112-2001, 
+//                TCC   
+//  Rev:          <RnXnn>
+//  Updated:	    2007.04.12
+//  Contact:      http://ttcn.ericsson.se
+//
+
+module SCCP_Testcases
+{//startmodule
+
+modulepar 
+{
+  hexstring tsp_own_GT := '0614377760'H;
+  hexstring tsp_remote_GT := '0614375760'H;
+  integer tsp_SSN := 2; //8:MSC 5:MAP see 3.4.2.2/Q.713
+  octetstring tsp_SIO := '83'O;//SCCP national
+  integer tsp_own_SPC := 461087; // =0x07091E 
+  integer tsp_remote_SPC := 461086; // =0x07091D
+  integer tsp_SLS := 0;
+  charstring tsp_sccp_serviceType := "mtp3_itu";
+  
+  octetstring MTP3_UserPart_SIO;
+  integer MTP3_UserPart_OPC,
+          MTP3_UserPart_DPC,
+          MTP3_UserPart_SLS
+}//modulepar
+
+import from General_Types all;
+
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+import from SCCPasp_Types  all;
+import from SCCP_Types  all;
+import from SCCP_Emulation all;
+
+/*************************************
+*   Components
+**************************************/
+
+
+// Model of MSC:
+type component MSC_ST {
+     port MTP3asp_SP_PT             CMGW6;
+     //port MTP3asp_PT         CMGW6;
+};
+
+
+// Main test component with behaviour SCCPuserA andSCCPuserB
+type component MTC_CT {
+  var SCCP_PAR_Address v_CalledAddress, v_CallingAddress;
+  var integer v_testvalue;
+  var SCCP_CT vc_SCCP_A ;
+  var MSC_SCCP_MTP3_parameters v_BootA;  
+  var SCCP_PAR_Connection_Id v_cid_A ;
+  
+  port SCCPasp_PT A_PORT; //SCCPuserA   
+}
+
+function initBootParams() runs on MTC_CT 
+{
+  v_BootA :=
+  { sio:=
+    { ni:= substr(oct2bit(tsp_SIO),0,2),
+      prio:= substr(oct2bit(tsp_SIO),2,2),
+      si:= substr(oct2bit(tsp_SIO),4,4)
+    },
+    opc:=tsp_own_SPC,
+    dpc:=tsp_remote_SPC, 
+    sls:=tsp_SLS, 
+    sccp_serviceType:=tsp_sccp_serviceType,
+    ssn:= tsp_SSN
+  };
+  return;
+} //initBootParams
+
+function init() runs on MTC_CT //system MSC_ST
+{
+  initBootParams();
+  log("v_BootA:",v_BootA);
+   
+  // Protocol Stack A creation & connections:
+  vc_SCCP_A:=SCCP_CT.create;
+  map(vc_SCCP_A:MTP3_SCCP_PORT,system:CMGW6); 
+  connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+  
+  vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters 
+  
+ 
+  log( "init() is done");
+  
+}// init
+
+function terminate( ) runs on MTC_CT //system MSC_ST
+{
+  log( "termitate() started");
+  /*while( all component.running != true )
+  {
+    //waits
+  }*/
+    all component.stop;
+    unmap(vc_SCCP_A:MTP3_SCCP_PORT,system:CMGW6); 
+    disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+  
+    log(" all components stopped");
+    self.stop;
+} //terminate
+
+// function getOddEven returns '0' 
+// if even number of dec digit can be found in GT see Q.713
+function getOddEven( in hexstring pl_GT) return bitstring
+{
+   return int2bit( (lengthof(pl_GT) mod 2) ,1);
+}
+
+function getOddEven_ansi( in hexstring pl_GT) return bitstring
+{
+   if( (lengthof(pl_GT) mod 2) == 0 ) { return '0010'B;} //even
+   else { return '0001'B;} //odd
+}
+
+//******************************************************************
+//function setAddresses_gti0001() runs on MTC_CT
+// Sets CalledAddress and CallingAddress as a gti001-type address
+// according to the cfg file.
+//******************************************************************
+
+function setAddresses_gti0001() runs on MTC_CT
+{
+    if( (tsp_sccp_serviceType == "mtp3_itu") or 
+        (tsp_sccp_serviceType == "mtp3b_itu") or
+        (tsp_sccp_serviceType == "mtp3_ttc") or
+        (tsp_sccp_serviceType == "mtp3b_ttc")
+      ) {
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0001:= {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_remote_GT ),
+            globalTitleAddress := tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+    
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_own_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle:= { 
+          gti0001 := {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_own_GT ), 
+            globalTitleAddress := tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+      
+    } else if(
+        (tsp_sccp_serviceType == "mtp3_ansi") or
+        (tsp_sccp_serviceType == "mtp3b_ansi")          
+      ) {
+      
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEven_ansi( tsp_remote_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+      
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEven_ansi( tsp_own_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+    }//if
+    
+}//setAddresses_gti001
+
+function f_SendAndReceive1N_UNITDATA(in octetstring pl_userdata) runs on MTC_CT 
+{
+  var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+  timer TL_timer:= 120.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_UNITDATA_req(  v_CalledAddress,
+                                      v_CallingAddress,
+                                      '00000001'B, //sequence control
+                                      '00000001'B, //return option
+                                      pl_userdata,
+                                      omit ) );
+  alt { 
+    [] A_PORT.receive( tr_ASP_N_UNITDATA_ind ) -> value vl_N_UNITDATA_ind
+      { 
+
+        if( (vl_N_UNITDATA_ind.calledAddress == v_CalledAddress ) and
+        (vl_N_UNITDATA_ind.callingAddress == v_CallingAddress) and 
+        (vl_N_UNITDATA_ind.userData == pl_userdata) )
+        {
+          log("Correct  CalledAddress, CallingAddress and userData received, data are correct");
+          setverdict(pass);
+        }
+        else
+        {
+          log("Some data corrupted");
+          setverdict( fail );
+        }
+      };       
+    [] TL_timer.timeout 
+      { 
+        setverdict( fail );
+        log("Timeout....");
+      };                                
+  } //alt  
+  TL_timer.stop;
+}//f_SendAndReceive1N_UNITDATA
+
+/****************************************************
+Connection Oriented Part
+****************************************************/
+
+/****************************************************
+function f_connect
+Establishes a connection
+(Sends an ASP_SCCP_N_CONNECT_req on A_PORT and waits for 
+N_CONNECT_ind on B_PORT. If it is received, 
+it sends back an ASP_SCCP_N_CONNECT_res on B_PORT and waits for
+N_CONNECT_cfm on A_PORT)
+****************************************************/
+function f_connect() runs on MTC_CT return boolean
+{
+  var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind;
+  var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm;
+  setverdict(none);
+  v_cid_A := 13;
+  timer TL_timer:= 120.0;
+  TL_timer.start; 
+  
+  A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress,
+                                    v_CallingAddress,
+                                    omit, //expeditedDataSel
+                                    omit, //QoS
+                                    omit, //userData
+                                    v_cid_A, 
+                                    omit //importance
+                                    ) );
+
+  alt {
+    [] A_PORT.receive( tr_ASP_N_CONNECT_cfm ) -> value vl_N_CONNECT_cfm
+      {
+        setverdict( pass );
+        log("f_connect finished successfully");
+        return true;
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( fail );
+        log("Timeout....");
+        return false;
+      }
+  }// alt
+  log("f_connect finished");
+  return false;
+}//f_connect
+
+/****************************************************
+function f_send
+Sends an ASP_SCCP_N_DATA_req on A_PORT and waits for answer in
+A_PORT
+****************************************************/
+function f_send(in octetstring pl_userdata) runs on MTC_CT
+{
+  timer TL_timer:= 120.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ;
+  alt {
+    [] A_PORT.receive
+      {
+        setverdict( pass );
+        log("f_connect finished successfully");
+         
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( fail );
+        log("Timeout....");
+         
+      }
+      
+  } //alt
+}//f_send
+
+//f_disconnect with timeout
+
+function f_disconnect( ) runs on MTC_CT 
+{
+  var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+  timer TL_timer:= 25.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_DISCONNECT_req( omit, // respondingAddress
+                                      0,  //reason : end user originated, see 3.11/Q.713
+                                      omit, //userData
+                                      v_cid_A, 
+                                      omit ))
+  alt {
+ 
+    [] A_PORT.receive
+      {
+        repeat;
+      }
+    [] TL_timer.timeout 
+      { 
+        setverdict( pass );
+        log("Timeout....");
+      };           
+  }//alt
+  
+ 
+}//f_disconnect
+
+//===================================================
+// Testcases
+//===================================================
+
+/****************************************************
+tc_ConnlessSendingShortASP
+Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+and receives it in one ASP_SCCP_N_UNITDATA_req.
+SCCP transfers information 
+in udp or (forced) xudp packets.
+****************************************************/
+testcase tc_ConnlessSendingShortASP() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata :='12345678901234567890'O;  
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+ } //tc_ConnlessSendingShortASP
+
+/****************************************************
+ tc_ConnlessSendingLongASP
+ Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+ and receives it in one ASP_SCCP_N_UNITDATA_req.
+ It is used for segmentation and reassembly.
+ SCCP transfers information 
+in xudp packets 
+****************************************************/
+testcase tc_ConnlessSendingLongASP() runs on MTC_CT system MSC_ST
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+}//tc_ConnlessSendingLongASP
+
+/****************************************************
+tc_ConnOrientedShortASPSending
+****************************************************/
+testcase tc_ConnOrientedShortASPSending() runs on MTC_CT system MSC_ST
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata := '12345678901234567890'O;
+  if(f_connect())
+  {
+    f_send(vl_userdata);
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+tc_ConnOrientedLongASPSending
+****************************************************/
+testcase tc_ConnOrientedLongASPSending() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  if(f_connect())
+  {
+    f_send(vl_userdata);
+    //f_SendAndReceive1N_UNITDATA( vl_userdata );
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+ CONTROL
+****************************************************/
+control 
+{
+  execute( tc_ConnlessSendingShortASP() );
+  execute( tc_ConnlessSendingLongASP() );
+  execute( tc_ConnOrientedShortASPSending());
+  execute( tc_ConnOrientedLongASPSending());
+}
+
+}//module
diff --git a/SCCP_CNL113341/demo/SCCP_Types.ttcn b/SCCP_CNL113341/demo/SCCP_Types.ttcn
new file mode 120000
index 0000000..9aa343b
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_Types.ttcn
@@ -0,0 +1 @@
+../src/SCCP_Types.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/demo/SCCP_selftest.cfg b/SCCP_CNL113341/demo/SCCP_selftest.cfg
new file mode 100644
index 0000000..67e0762
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_selftest.cfg
@@ -0,0 +1,52 @@
+[LOGGING]
+#FileName := "SCCP_selftest.cfg"
+FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+#ConsoleMask := LOG_ALL
+ConsoleMask :=  TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT
+#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING 
+#LogFile := "My.log"
+#TimeStampFormat := Time
+LogSourceInfo := Yes
+
+[EXECUTE]
+SCCP_selftest.tc_ConnlessSendingShortASP
+#SCCP_selftest.tc_ConnlessSendingLongASP
+[TESTPORT_PARAMETERS]
+// *******************************************************
+// * DO NOT FORGET TO SET THE FOLLOWING TWO LINE TO YOUR SEA *
+// *******************************************************
+system.*.Hostname := "karasea"  //sea server name
+system.*.HttpPort := "5000"   //sea http port
+system.*.IID_String := "b303d76a-266c-11d4-b8f5-08002090d3da"
+                              //Device Type ID
+system.*.Loop:= "ON"
+system.*.Filter:= "OFF"
+system.*.MTP3ServiceType := "MTP3ttc" //"MTP3itu" ["MTP3itu" (default)|"MTP3ansi" | "M3UA" | "MTP3ttc" ]
+
+// CMGW6 -> SCTP_ASSOC_10.2.110.102
+// CMGW3 data: SCTP_ASSOC_10.2.110.2
+system.CMGW6.EntityName := "S7ST-0" //device name to connect
+system.CMGW6.NI := "2"
+system.CMGW6.SUT_Pc:= "461086" // 07-09-30  =0x07091E see command: s7stp:st=s7stg-0&&-32;
+system.CMGW6.TESTER_Pc:= "461087" //07-09-31=0x07091F
+system.CMGW6.M3UA_version:= "1"
+
+[MODULE_PARAMETERS]
+//for sccp:
+tsp_own_GT := '14377760'H
+tsp_remote_GT := '14375760'H
+tsp_SSN := 2 //8:MSC 5:MAP see 3.4.2.2/Q.713
+tsp_SIO := '03'O //SCCP national
+tsp_own_SPC := 2351 //16382
+tsp_remote_SPC := 2300 //16383 // max value on 14 bits
+#tsp_own_SPC := 461087 // =0x07091E 
+#tsp_remote_SPC := 461086 // =0x07091D
+tsp_SLS := 0
+#tsp_sccp_serviceType := "mtp3_itu"
+#tsp_sccp_serviceType := "mtp3_ansi"
+tsp_sccp_serviceType := "mtp3_ttc"
+
+#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 :
+#tsp_translationType := 7
+tsp_SIF_MaxLength := 272
+tsp_force_xudt := 1 // 1:yes, 0:no 
diff --git a/SCCP_CNL113341/demo/SCCP_selftest.ttcn b/SCCP_CNL113341/demo/SCCP_selftest.ttcn
new file mode 100644
index 0000000..c649704
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCP_selftest.ttcn
@@ -0,0 +1,607 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+// Copyright Test Competence Center (TCC) ETH 2007
+//
+//
+//
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File: 		    SCCP_selftest.ttcn
+//  Description:  SS7 SCCP basic test
+//                according to specification ITU-T SS7 SCCP, ANSI ..., TCC ... 
+//  References:   ITU-T: Recommendation Q.711-Q.714, 
+//                ANSI  , 
+//                TCC 
+//  Rev:          <RnXnn>
+//  Updated:	    2007-04.12
+//  Contact:      http://ttcn.ericsson.se
+//
+
+module SCCP_selftest
+{//startmodule
+
+modulepar 
+{
+  hexstring tsp_own_GT := '0614377760'H;
+  hexstring tsp_remote_GT := '0614375760'H;
+  integer tsp_SSN := 2; //8:MSC 5:MAP see 3.4.2.2/Q.713
+  octetstring tsp_SIO := '83'O;//SCCP national
+  integer tsp_own_SPC := 461087; // =0x07091E 
+  integer tsp_remote_SPC := 461086; // =0x07091D
+  integer tsp_SLS := 0;
+  charstring tsp_sccp_serviceType := "mtp3_itu"
+}//modulepar
+
+import from General_Types all;
+
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+import from SCCPasp_Types  all;
+import from SCCP_Types  all;
+import from SCCP_Emulation all;
+
+
+//==================================================================
+// MTPsim component
+// Description: Simulates two MTP stacks for two MTP3-User
+//              to implement this configuration:
+//              MTPsim includes MTP3/1 and MTP3/2
+//              MTPsim only receives TRANSFER_req and sends TRANSFER_ind
+//              with the same content
+//       +----------+       +----------+
+//       |SCCP-userA| <--->|SCCP-userB|          = MTC
+//       +----------+      +----------+
+//            | A               | B
+//       +----------+       +----------+
+//       | SCCP   A | <--->| SCCP B   |
+//       +----------+      +----------+
+//            | A               | B
+//       +-----------------------------+
+//       | MTP3  1.        | MTP3   2.|         = MTP3sim
+//       +----------------------------+
+//
+//==================================================================
+
+group MTPsim 
+{
+
+
+type component MTPsim_CT {
+  port MTP3asp_SP_PT MTP_A_PORT
+  port MTP3asp_SP_PT MTP_B_PORT
+}
+
+function MTPsim_EventHandler(  ) runs on MTPsim_CT
+{
+  var ASP_MTP3_TRANSFERreq vl_MTP3_TRANSFERreq;
+  var ASP_MTP3_TRANSFERind vl_MTP3_TRANSFERind
+  alt{
+    [] MTP_A_PORT.receive( ASP_MTP3_TRANSFERreq:? ) -> value vl_MTP3_TRANSFERreq 
+          
+       { 
+          MTP_B_PORT.send( t_ASP_MTP3_TRANSFERind( 
+                                            vl_MTP3_TRANSFERreq.sio,   
+                                            vl_MTP3_TRANSFERreq.opc,
+                                            vl_MTP3_TRANSFERreq.dpc,
+                                            vl_MTP3_TRANSFERreq.sls,
+                                            vl_MTP3_TRANSFERreq.data ) ) ;
+          repeat;
+       }//A.receive
+    [] MTP_B_PORT.receive( ASP_MTP3_TRANSFERreq:? ) -> value vl_MTP3_TRANSFERreq
+          
+      { 
+        MTP_A_PORT.send( t_ASP_MTP3_TRANSFERind (
+                                            vl_MTP3_TRANSFERreq.sio,   
+                                            vl_MTP3_TRANSFERreq.opc,
+                                            vl_MTP3_TRANSFERreq.dpc,
+                                            vl_MTP3_TRANSFERreq.sls,
+                                            vl_MTP3_TRANSFERreq.data ));
+        repeat;
+      }//B.receive
+              
+  }//alt
+
+} //MTPsim_EventHandler
+
+}//group MTPsim
+
+// Main test component with behaviour SCCPuserA andSCCPuserB
+type component MTC_CT {
+  var SCCP_PAR_Address v_CalledAddress, v_CallingAddress;
+  var integer v_testvalue;
+  var MTPsim_CT vc_MTPsim;
+  var SCCP_CT vc_SCCP_A, vc_SCCP_B;
+  var MSC_SCCP_MTP3_parameters v_BootA;  
+  var MSC_SCCP_MTP3_parameters v_BootB;
+  var SCCP_PAR_Connection_Id v_cid_A, v_cid_B;
+  
+  port SCCPasp_PT A_PORT; //SCCPuserA  
+  port SCCPasp_PT B_PORT  //SCCPuserB
+  
+}
+
+function initBootParams() runs on MTC_CT
+{
+  v_BootA :=
+  { sio:=
+    { ni:= substr(oct2bit(tsp_SIO),0,2),
+      prio:= substr(oct2bit(tsp_SIO),2,2),
+      si:= substr(oct2bit(tsp_SIO),4,4)
+    },
+    opc:=tsp_own_SPC,
+    dpc:=tsp_remote_SPC, 
+    sls:=tsp_SLS, 
+    sccp_serviceType:=tsp_sccp_serviceType,
+    ssn:= tsp_SSN
+  };
+ 
+  v_BootB :=
+  { sio:=
+    { ni:= substr(oct2bit(tsp_SIO),0,2),
+      prio:= substr(oct2bit(tsp_SIO),2,2),
+      si:= substr(oct2bit(tsp_SIO),4,4)
+    },
+    opc:=tsp_remote_SPC,
+    dpc:=tsp_own_SPC, 
+    sls:=tsp_SLS, 
+    sccp_serviceType:=tsp_sccp_serviceType,
+    ssn:= tsp_SSN
+  };
+  return;
+} //initBootParams
+function init() runs on MTC_CT
+{
+
+  
+  initBootParams();
+  log("v_BootA:",v_BootA);
+  log("v_BootB: ",v_BootB);
+  vc_MTPsim:= MTPsim_CT.create; 
+  
+  // Protocol Stack A creation & connections:
+  vc_SCCP_A:=SCCP_CT.create;
+  connect(vc_SCCP_A:MTP3_SCCP_PORT,vc_MTPsim:MTP_A_PORT); 
+  connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+  
+  // Protocol Stack B creation & connections:
+  vc_SCCP_B:=SCCP_CT.create;
+  connect(vc_SCCP_B:MTP3_SCCP_PORT,vc_MTPsim:MTP_B_PORT);
+  connect(self:B_PORT,vc_SCCP_B:SCCP_SP_PORT);
+
+  // Start stacks: 
+  vc_MTPsim.start( MTPsim_EventHandler() ); 
+
+  vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters !!! cont here!!!
+  
+  vc_SCCP_B.start( SCCPStart(v_BootB));
+  log( "init() is done");
+  
+}// init
+
+function terminate( ) runs on MTC_CT
+{
+  log( "termitate() started");
+  /*while( all component.running != true )
+  {
+    //waits
+  }*/
+    all component.stop;
+    disconnect(vc_SCCP_A:MTP3_SCCP_PORT, vc_MTPsim:MTP_A_PORT); 
+    disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+  
+    disconnect(vc_SCCP_B:MTP3_SCCP_PORT,vc_MTPsim:MTP_B_PORT);
+    disconnect(self:B_PORT,vc_SCCP_B:SCCP_SP_PORT);
+    log(" all components stopped");
+    self.stop;
+} //terminate
+
+// function getOddEven returns '0' 
+// if even number of dec digit can be found in GT see Q.713
+function getOddEven( in hexstring pl_GT) return bitstring
+{
+   return int2bit( (lengthof(pl_GT) mod 2) ,1);
+}
+
+function getOddEvenEnc( in hexstring pl_GT) return bitstring
+{
+   if( (lengthof(pl_GT) mod 2) == 0 ) { return '0010'B;} //even
+   else { return '0001'B;} //odd
+}
+
+//******************************************************************
+//function setAddresses_gti0001() runs on MTC_CT
+// Sets CalledAddress and CallingAddress as a gti001-type address
+// according to the cfg file.
+//******************************************************************
+
+function setAddresses_gti0001() runs on MTC_CT
+{
+    if( (tsp_sccp_serviceType == "mtp3_itu") or 
+        (tsp_sccp_serviceType == "mtp3b_itu") or
+        (tsp_sccp_serviceType == "mtp3_ttc") or
+        (tsp_sccp_serviceType == "mtp3b_ttc")
+      ) {
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP_Emulation.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0001:= {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_remote_GT ),
+            globalTitleAddress := tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+    
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_own_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP_Emulation.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle:= { 
+          gti0001 := {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_own_GT ), 
+            globalTitleAddress := tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+      
+    } else if(
+        (tsp_sccp_serviceType == "mtp3_ansi") or
+        (tsp_sccp_serviceType == "mtp3b_ansi")  )        
+    {
+      
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP_Emulation.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEvenEnc( tsp_remote_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+      
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP_Emulation.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEvenEnc( tsp_own_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+      
+    }//if
+    else  
+    {
+      log( "wrong tsp_sccp_serviceType ->exit ");
+      setverdict( fail );
+    } 
+}//setAddresses_gti001
+
+function f_SendAndReceive1N_UNITDATA(in octetstring pl_userdata) runs on MTC_CT 
+{
+  var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+  timer TL_timer:= 40.0;
+  TL_timer.start;
+  log("A_PORT.send follows");
+  log("Addresses:",v_CalledAddress, v_CallingAddress);
+  A_PORT.send( t_ASP_N_UNITDATA_req(  v_CalledAddress,
+                                      v_CallingAddress,
+                                      '00000001'B, //sequence control
+                                      '00000001'B, //return option
+                                      pl_userdata,
+                                      omit ) );
+  log("A_PORT.send executed");
+  alt { 
+    [] B_PORT.receive( tr_ASP_N_UNITDATA_ind ) -> value vl_N_UNITDATA_ind
+      { 
+
+        if( (vl_N_UNITDATA_ind.calledAddress == v_CalledAddress ) and
+        (vl_N_UNITDATA_ind.callingAddress == v_CallingAddress) and 
+        (vl_N_UNITDATA_ind.userData == pl_userdata) )
+        {
+          log("Correct  CalledAddress, CallingAddress and userData received, data are correct");
+          setverdict(pass);
+        }
+        else
+        {
+          log("Some data corrupted");
+          log("Original data:", v_CalledAddress, v_CallingAddress, pl_userdata);
+          setverdict( fail );
+        }
+      };       
+    [] TL_timer.timeout 
+      { 
+        setverdict( fail );
+        log("Timeout....");
+      };                                
+  } //alt  
+  TL_timer.stop;
+}//f_SendAndReceive1N_UNITDATA
+
+/****************************************************
+Connection Oriented Part
+****************************************************/
+
+/****************************************************
+function f_connect
+Establishes a connection
+(Sends an ASP_SCCP_N_CONNECT_req on A_PORT and waits for 
+N_CONNECT_ind on B_PORT. If it is received, 
+it sends back an ASP_SCCP_N_CONNECT_res on B_PORT and waits for
+N_CONNECT_cfm on A_PORT)
+****************************************************/
+function f_connect() runs on MTC_CT return boolean
+{
+  var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind;
+  var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm;
+  setverdict(none);
+  v_cid_A := 13;
+  timer TL_timer:= 40.0;
+  TL_timer.start; 
+  // A Sends ASP_SCCP_N_CONNECT_req , receives
+  A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress,
+                                    v_CallingAddress,
+                                    omit, //expeditedDataSel
+                                    omit, //QoS
+                                    omit, //userData
+                                    v_cid_A, 
+                                    omit //importance
+                                    ) );
+  alt {
+    [] B_PORT.receive( tr_ASP_N_CONNECT_ind ) -> value vl_N_CONNECT_ind
+      {
+        v_cid_B := vl_N_CONNECT_ind.connectionId;
+        B_PORT.send( t_ASP_N_CONNECT_res( omit,// respondingAddress
+                                          omit,//expeditedDataSel
+                                          omit,//qualityOfService
+                                          omit, //userData
+                                          v_cid_B,
+                                          omit //importance 
+                                          ));
+      } 
+    [] B_PORT.receive 
+      {
+        log( "unexpected asp received for ASP_SCCP_N_CONNECT_req, failed");
+        setverdict( fail );
+        return false;
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( pass );
+        log("Timeout....");
+        return false;
+      }
+  }
+  
+  // receives ASP_SCCP_N_CONNECT_cfm  
+  alt {
+    [] A_PORT.receive( tr_ASP_N_CONNECT_cfm ) -> value vl_N_CONNECT_cfm
+      {
+        setverdict( pass );
+        log("f_connect finished successfully");
+        return true;
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( pass );
+        log("Timeout....");
+        return false;
+      }
+  }// alt
+  log("f_connect finished");
+  return false;
+}//f_connect
+
+/****************************************************
+function f_send
+Sends an ASP_SCCP_N_DATA_req on A_PORT and waits for answer in
+B_PORT
+****************************************************/
+function f_send(in octetstring pl_userdata) runs on MTC_CT
+{
+  var ASP_SCCP_N_DATA_ind vl_N_DATA_ind;
+  timer TL_timer:= 120.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ;
+  alt {
+    [] B_PORT.receive( tr_ASP_N_DATA_ind ) -> value vl_N_DATA_ind
+    {
+      if( vl_N_DATA_ind.userData == pl_userdata )
+      {
+        log( "userData received correctly" );
+        setverdict( pass );
+      } 
+      else
+      {
+        log("user data mismatch error in f_send()")
+        setverdict(fail);
+      }
+      
+    }//B_PORT.receive( tr_ASP_N_DATA_ind )
+    
+    [] B_PORT.receive 
+      {
+        log( "unexpected asp received for ASP_SCCP_N_DATA_req, failed");
+        setverdict( fail );
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( pass );
+        log("Timeout....");
+      }
+      
+   } //alt
+}//f_send
+
+//f_disconnect with timeout
+
+function f_disconnect( ) runs on MTC_CT 
+{
+  var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+  timer TL_timer:= 5.0;
+  TL_timer.start;
+  A_PORT.send(t_ASP_N_DISCONNECT_req( omit, // respondingAddress
+                                      0,  //reason : end user originated, see 3.11/Q.713
+                                      omit, //userData
+                                      v_cid_A, 
+                                      omit ))
+  alt {
+    [] B_PORT.receive(tr_ASP_N_DISCONNECT_ind) -> value vl_N_DISCONNECT_ind
+      {
+        setverdict( pass );
+      }
+    [] B_PORT.receive
+      {
+        log("unexpected asp received on B_PORT instead of ASP_SCCP_N_DISCONNECT_ind");
+        //repeat;
+        setverdict(fail);
+      }
+    [] TL_timer.timeout 
+      { 
+        setverdict( fail );
+        log("Timeout....");
+      };           
+  }//alt
+  
+  //give time for inner release complete (rlc):
+  alt {
+    [] TL_timer.timeout 
+      { 
+        setverdict( pass );
+        log("Stopped with expected timeout");
+      };           
+  }  
+}//f_disconnect
+
+//===================================================
+// Testcases
+//===================================================
+
+/****************************************************
+tc_ConnlessSendingShortASP
+Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+and receives it in one ASP_SCCP_N_UNITDATA_req.
+SCCP transfers information 
+in udp or (forced) xudp packets.
+****************************************************/
+testcase tc_ConnlessSendingShortASP() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata :='12345678901234567890'O;  
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+ } //tc_ConnlessSendingShortASP
+
+/****************************************************
+ tc_ConnlessSendingLongASP
+ Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+ and receives it in one ASP_SCCP_N_UNITDATA_req.
+ It is used for segmentation and reassembly.
+ SCCP transfers information 
+in xudp packets 
+****************************************************/
+testcase tc_ConnlessSendingLongASP() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+}//tc_ConnlessSendingLongASP
+
+/****************************************************
+tc_ConnOrientedShortASPSending
+****************************************************/
+testcase tc_ConnOrientedShortASPSending() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata := '12345678901234567890'O;
+  if(f_connect( ))
+  {
+    f_send(vl_userdata);
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+tc_ConnOrientedLongASPSending
+****************************************************/
+testcase tc_ConnOrientedLongASPSending() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  if(f_connect( ))
+  {
+    f_send(vl_userdata);
+    //f_SendAndReceive1N_UNITDATA( vl_userdata );
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+ CONTROL
+****************************************************/
+control 
+{
+  execute( tc_ConnlessSendingShortASP() );
+  execute( tc_ConnlessSendingLongASP() );
+  execute( tc_ConnOrientedShortASPSending());
+  execute( tc_ConnOrientedLongASPSending());
+}
+
+}//module
diff --git a/SCCP_CNL113341/demo/SCCPasp_Types.ttcn b/SCCP_CNL113341/demo/SCCPasp_Types.ttcn
new file mode 120000
index 0000000..f7668d7
--- /dev/null
+++ b/SCCP_CNL113341/demo/SCCPasp_Types.ttcn
@@ -0,0 +1 @@
+../src/SCCPasp_Types.ttcn
\ No newline at end of file
diff --git a/SCCP_CNL113341/src/SCCP_Emulation.ttcn b/SCCP_CNL113341/src/SCCP_Emulation.ttcn
new file mode 100644
index 0000000..5e269cc
--- /dev/null
+++ b/SCCP_CNL113341/src/SCCP_Emulation.ttcn
@@ -0,0 +1,6031 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2008                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//  File:         SCCP_Emulation.ttcn
+//  Description:  SS7 SCCP definitions and dynamic part according to
+//                 specification ITU-T SS7 SCCP, ANSI ..., ttc ...
+//  References:   ITU-T: Recommendation Q.711-Q.714,
+//                ANSI : T1.111-2001 (MTP) and T1.112-2001 (SCCP)
+//                TTC  : JT-Q711
+//  Rev:          R6A05
+//  Prodnr:       CNL 113 341
+//  Updated:      2009-01-26
+//  Contact:      http://ttcn.ericsson.se
+
+module SCCP_Emulation
+{//startmodule
+
+modulepar
+{
+  float   tsp_maxLocalReference := 16777216.0;  //loc ref= 0...tsp_maxLocalReference-1
+  float   tsp_max_ConnectionId  := 16777216.0;  //max connection id = 0..tsp_max_ConnectionId -1
+  integer tsp_force_xudt := 0;
+  integer tsp_SIF_MaxLength := 272
+}
+
+import from General_Types all;
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+import from SCCP_Types  all;
+import from SCCPasp_Types all;
+import from SCCP_Mapping all;
+
+group   SCCPConstants
+{//startgroup SCCPConstants
+
+//------------------------------------------------------------------------------
+// Subsystem Numbers
+//------------------------------------------------------------------------------
+
+const integer cg_SSN_notKnown:=0;
+const integer cg_SSN_sCCPmanagement:=1;
+const integer cg_SSN_reservedForITU:=2;
+const integer cg_SSN_iSUP:=3;
+const integer cg_SSN_oMAP:=4;
+const integer cg_SSN_mAP:=5;
+const integer cg_SSN_hLR:=6;
+const integer cg_SSN_vLR:=7;
+const integer cg_SSN_mSC:=8;
+const integer cg_SSN_eIC:=9;
+const integer cg_SSN_aUC:=10;
+const integer cg_SSN_isdnSS:=11;
+const integer cg_SSN_reservedForIntUse:=12;
+const integer cg_SSN_bISDNe2e:=13;
+const integer cg_SSN_tCtestResponder:=14;
+const integer cg_SSN_rANAP:=142;
+const integer cg_SSN_bSSAP:=254;
+// TCAP has not SSN
+
+//------------------------------------------------------------------------------
+// Routing Indicator values ITU: 3.4.1/Q713.
+//------------------------------------------------------------------------------
+const BIT1n cg_route_on_SSN := '1'B;
+const BIT1n cg_route_on_GT := '0'B;
+
+//------------------------------------------------------------------------------
+// Release Cause
+//------------------------------------------------------------------------------
+
+
+const integer cg_Rel_endUserOrig:=0;
+const integer cg_Rel_endUserCong:=1;
+const integer cg_Rel_endUserFailure:=2;
+const integer cg_Rel_sCCPUserOrig:=3;
+const integer cg_Rel_remProcError:=4;
+const integer cg_Rel_inconsConnData:=5;
+const integer cg_Rel_accessFailure:=6;
+const integer cg_Rel_accessCongestion:=7;
+const integer cg_Rel_subsystFailure:=8;
+const integer cg_Rel_subsystCongest:=9;
+const integer cg_Rel_mTPFailure:=10;
+const integer cg_Rel_networkCongest:=11;
+const integer cg_Rel_expResetTimer:=12;
+const integer cg_Rel_expRecInacTimer:=13;
+const integer cg_Rel_reserved:=14;
+const integer cg_Rel_unqualified:=15;
+const integer cg_Rel_sCCPFailure:=16;
+
+//------------------------------------------------------------------------------
+// Return Cause
+//------------------------------------------------------------------------------
+
+const integer cg_Ret_noTransl4AddrNature:=0;
+const integer cg_Ret_noTransl4SpecifAddr:=1;
+const integer cg_Ret_subsystemCongestion:=2;
+const integer cg_Ret_subsystemFailure:=3;
+const integer cg_Ret_unequippedUser:=4;
+const integer cg_Ret_mTPFailure:=5;
+const integer cg_Ret_networkCongestion:=6;
+const integer cg_Ret_unqualified:=7;
+const integer cg_Ret_errorMessageTransport:=8;
+const integer cg_Ret_errorLocalProcessing:=9;
+const integer cg_Ret_destNoReassembly:=10;
+const integer cg_Ret_sCCPFailure:=11;
+const integer cg_Ret_hopCounterViolation:=12;
+const integer cg_Ret_segmeNotSupported:=13;
+const integer cg_Ret_segmentationFailure:=14;
+
+//------------------------------------------------------------------------------
+// Reset Cause
+//------------------------------------------------------------------------------
+
+
+const integer cg_Res_endUserOrig:=0;
+const integer cg_Res_sCCPUserOrig:=1;
+const integer cg_Res_messOutOfOrder_incPs:=2;
+const integer cg_Res_messOutOfOrder_incPr:=3;
+const integer cg_Res_remProcErr_messOutOfWindow:=4;
+const integer cg_Res_remProcErr_IncPsAfterReinit:=5;
+const integer cg_Res_remProcErr_general:=6;
+const integer cg_Res_remEndUserOperational:=7;
+const integer cg_Res_networkOperational:=8;
+const integer cg_Res_accessOperational:=9;
+const integer cg_Res_networkCongestion:=10;
+const integer cg_Res_reserved:=11;
+const integer cg_Res_unqualified:=12;
+
+//------------------------------------------------------------------------------
+//Error Cause
+//------------------------------------------------------------------------------
+
+const integer cg_Err_unassignedDestinationLRN:=0 ;
+const integer cg_Err_inconsistentSourceLRN:=1 ;
+const integer cg_Err_pointCodeMismatch:=2 ;
+const integer cg_Err_serviceClassMismatch:=3 ;
+const integer cg_Err_unqualified:=4 ;
+
+//------------------------------------------------------------------------------
+//Refusal  Cause
+//------------------------------------------------------------------------------
+
+const integer cg_Ref_endUserOrigin:=0;
+const integer cg_Ref_endUserConges:=1;
+const integer cg_Ref_endUserFailure:=2;
+const integer cg_Ref_sCCPUserOrigin:=3;
+const integer cg_Ref_destAddrUnkn:=4;
+const integer cg_Ref_destInaccess:=5;
+const integer cg_Ref_qOSNotAvail_nonTransient:=6;
+const integer cg_Ref_qOSNotAvail_transient:=7;
+const integer cg_Ref_accessFailure:=8;
+const integer cg_Ref_accessCongestion:=9;
+const integer cg_Ref_subsystemFailure:=10;
+const integer cg_Ref_subsystemCongest:=11;
+const integer cg_Ref_expConnEstTimer:=12;
+const integer cg_Ref_incomUserData:=13;
+const integer cg_Ref_reserved:=14;
+const integer cg_Ref_unqualified:=15;
+const integer cg_Ref_hopCounterViol:=16;
+const integer cg_Ref_sCCPFailure:=17;
+const integer cg_Ref_noTransl4address:=18;
+const integer cg_Ref_unequippedUser:=19;
+
+//------------------------------------------------------------------------------
+// Originator
+//------------------------------------------------------------------------------
+
+const integer cg_Undefined:=0;
+const integer cg_NSU:=1;
+const integer cg_NSP:=2;
+
+
+//------------------------------------------------------------------------------
+// CREF Reason
+//------------------------------------------------------------------------------
+
+const integer cg_CREF_endUserOrig:=0;
+const integer cg_CREF_endUserCong:=1;
+const integer cg_CREF_endUserFailure:=2;
+const integer cg_CREF_SCCPUserOrig:=3;
+const integer cg_CREF_destAddrUnknwn_NT:=4;
+const integer cg_CREF_destInaccg_T:=5;
+const integer cg_CREF_QOSUnavail_NT:=6;
+const integer cg_CREF_QOSUnavail_T:=7;
+const integer cg_CREF_accessFailure:=8;
+const integer cg_CREF_accessCong:=9;
+const integer cg_CREF_destInaccg_NT:=10;
+const integer cg_CREF_subsystCong:=11;
+const integer cg_CREF_unspec_T:=12;
+const integer cg_CREF_incompInfo:=13;
+const integer cg_CREF_unspec_NT:=15;
+const integer cg_CREF_undef:=16;
+const integer cg_CREF_hopCntrViolation:=18;
+
+//------------------------------------------------------------------------------
+// DISC Reason
+//------------------------------------------------------------------------------
+
+const integer cg_DISC_normal:=20;
+const integer cg_DISC_endUserCong:=21;
+const integer cg_DISC_endUserFailure:=22;
+const integer cg_DISC_SCCPUserOrig:=23;
+const integer cg_DISC_abnormal_T:=24;
+const integer cg_DISC_accessFailure:=28;
+const integer cg_DISC_accessCong:=29;
+const integer cg_DISC_abnormal_NT:=30;
+const integer cg_DISC_subsystCong:=31;
+const integer cg_DISC_undef:=32;
+const integer cg_DISC_incompInfo:=33;
+const integer cg_DISC_abnormal:=35;
+
+//------------------------------------------------------------------------------
+// RESET Reason
+//------------------------------------------------------------------------------
+const integer cg_RESET_userSynch:= 40  ;
+const integer cg_RESET_unspec:= 41  ;
+const integer cg_RESET_netCong:= 42  ;
+const integer cg_RESET_undef:= 43  ;
+
+//------------------------------------------------------------------------------
+//Mapping Refusal  Cause to Reason and Originator A.1/Q.713
+//------------------------------------------------------------------------------
+
+const integer cg_Mapping_RefCause_Orig[19]:=
+{
+  cg_NSU,
+  cg_NSU,
+  cg_NSU,
+  cg_NSU,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSU,
+  cg_NSU,
+  cg_NSP,
+  cg_NSU,
+  cg_NSP,
+  cg_NSU,
+  cg_NSP,
+  cg_Undefined,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP
+};
+
+
+const integer cg_Mapping_RefCause_Reason[19]:=
+{
+  cg_CREF_endUserOrig,
+  cg_CREF_endUserCong,
+  cg_CREF_endUserFailure,
+  cg_CREF_SCCPUserOrig,
+  cg_CREF_destAddrUnknwn_NT,
+  cg_CREF_destInaccg_T,
+  cg_CREF_QOSUnavail_NT,
+  cg_CREF_QOSUnavail_T,
+  cg_CREF_accessFailure,
+  cg_CREF_accessCong,
+  cg_CREF_destInaccg_NT,
+  cg_CREF_subsystCong,
+  cg_CREF_unspec_T,
+  cg_CREF_incompInfo,
+  cg_CREF_unspec_T,
+  cg_CREF_undef,
+  cg_CREF_hopCntrViolation,
+  cg_CREF_destAddrUnknwn_NT,
+  cg_CREF_destInaccg_NT
+};
+
+//------------------------------------------------------------------------------
+//Mapping Release  Cause to Reason and Originator A.2/Q.713
+//------------------------------------------------------------------------------
+
+const integer cg_Mapping_RelCause_Orig[17]:=
+{
+  cg_NSU,
+  cg_NSU,
+  cg_NSU,
+  cg_NSU,
+  cg_NSP,
+  cg_NSP,
+  cg_NSU,
+  cg_NSU,
+  cg_NSP,
+  cg_NSU,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_Undefined,
+  cg_Undefined,
+  cg_NSP
+};
+
+//mapping CREF-> ASP_SCCP_N_DISCONNECT_ind:
+//Reason:=cg_Mapping_RefCause_Reason[RefCause];
+//Originator:=cg_Mapping_RefCause_Orig[RefCause];
+
+
+//mapping ASP_SCCP_N_DISCONNECT_req-> CREF:
+//
+
+const integer cg_Mapping_RelCause_Reason[17]:= {
+  cg_DISC_normal,
+  cg_DISC_endUserCong,
+  cg_DISC_endUserFailure,
+  cg_DISC_SCCPUserOrig,
+  cg_DISC_abnormal_T,
+  cg_DISC_abnormal_T,
+  cg_DISC_accessFailure,
+  cg_DISC_accessCong,
+  cg_DISC_abnormal_NT,
+  cg_DISC_subsystCong,
+  cg_DISC_abnormal_NT,
+  cg_DISC_abnormal_T,
+  cg_DISC_abnormal_T,
+  cg_DISC_abnormal_T,
+  cg_DISC_undef,
+  cg_DISC_undef,
+  cg_DISC_abnormal_NT
+};
+
+
+
+//mapping RLSD-> ASP_SCCP_N_DISCONNECT_ind:
+//Reason:=cg_Mapping_RelCause_Reason[RelCause];
+//Originator:=cg_Mapping_RelCause_Orig[RelCause];
+
+//mapping ASP_SCCP_N_DISCONNECT_req-> RLSD:
+//
+
+
+//------------------------------------------------------------------------------
+//Mapping Reset  Cause to Reason and Originator A.2/Q.713
+//------------------------------------------------------------------------------
+
+
+const integer cg_Mapping_ResCause_Orig[12]:= {
+  cg_NSU,
+  cg_NSU,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSP,
+  cg_NSU,
+  cg_NSP,
+  cg_NSU,
+  cg_NSP,
+  cg_Undefined
+};
+
+
+const integer cg_Mapping_ResCause_Reason[12]:= {
+  cg_RESET_userSynch,
+  cg_RESET_userSynch,
+  cg_RESET_unspec,
+  cg_RESET_unspec,
+  cg_RESET_unspec,
+  cg_RESET_unspec,
+  cg_RESET_unspec,
+  cg_RESET_userSynch,
+  cg_RESET_unspec,
+  cg_RESET_userSynch,
+  cg_RESET_netCong,
+  cg_RESET_undef
+};
+
+//mapping RSR-> ASP_SCCP_N_DISCONNECT_ind:
+//Reason:=cg_Mapping_ResCause_Reason[ResCause];
+//Originator:=cg_Mapping_ResCause_Orig[ResCause];
+
+//mapping ASP_SCCP_N_DISCONNECT_req-> RSR:
+//
+
+const integer cg_TimerArraySize := 16;
+
+}//endgroup SCCPConstants
+
+//******************************************************************************
+// PDU templates
+//******************************************************************************
+
+
+group PDUTemplateDefinitionsSending
+{
+
+
+
+//******************************************************************************
+// Message Connection Request (CR) (Q713 $4.2)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template           PDU_SCCP_ConnectionRequest t_PDU_SCCP_ConnectionRequest
+(
+          SCCP_param_SourceLocalReference   pl_SLR,
+          SCCP_param_ProtocolClass          pl_Proto_Class,
+          SCCP_param_CPartyAddressEnc       pl_CalledAddress,
+template  SCCP_param_Credit_opt             pl_credit,
+template  SCCP_param_CPartyAddressEnc_opt   pl_CallingAddress  ,
+template  SCCP_param_Data_opt               pl_Data,
+template  SCCP_param_HopCounter_opt         pl_HopCntr,
+template  SCCP_param_Importance_opt         pl_Imp,
+template  SCCP_param_EndOfOptionalParams    pl_eop
+
+):=
+  {
+    messageType:=cr,
+    sourceLocRef:=pl_SLR,
+    protClass:=pl_Proto_Class,
+    pointer1:=2,
+    pointer2:=0,
+    calledPAddress:=pl_CalledAddress,
+    optionalPart:=  {
+      credit:=pl_credit,
+      callingPAddress:=pl_CallingAddress,
+      data:=pl_Data,
+      hopCounter:=pl_HopCntr,
+      importance:=pl_Imp
+    },
+    eop:=pl_eop
+  }
+
+
+
+//******************************************************************************
+// Message Connection Confirm (CC) (Q713 $4.3)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_ConnectionConfirm t_PDU_SCCP_ConnectionConfirm
+(
+         SCCP_param_DestLocalReference   pl_DLR,
+         SCCP_param_SourceLocalReference pl_SLR,
+         SCCP_param_ProtocolClass        pl_Proto_Class,
+template SCCP_param_Credit_opt           pl_credit,
+template SCCP_param_CPartyAddressEnc_opt pl_CalledAddress,
+template SCCP_param_Data_opt             pl_Data,
+template SCCP_param_Importance_opt       pl_Imp,
+template SCCP_param_EndOfOptionalParams  pl_eop
+):=
+  {
+    messageType:=cc,
+    destLocRef:=pl_DLR,
+    sourceLocRef:=pl_SLR,
+    protClass:=pl_Proto_Class,
+    pointer1:=1,
+    optionalPart:=  {
+          credit:=pl_credit,
+          calledPAddress:=pl_CalledAddress,
+          data:=pl_Data,
+          importance:=pl_Imp
+    },
+    eop:=pl_eop
+  }
+
+
+//******************************************************************************
+// Message Connection Refused (CREF) (Q713 $4.4)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template  PDU_SCCP_ConnectionRefused t_PDU_SCCP_ConnectionRefused
+(
+          SCCP_param_DestLocalReference     pl_DLR,
+          SCCP_param_RefusalCause           pl_RefCause,
+template  SCCP_param_CPartyAddressEnc_opt   pl_CalledAddress,
+template  SCCP_param_Data_opt               pl_Data,
+template  SCCP_param_Importance_opt         pl_Imp,
+template  SCCP_param_EndOfOptionalParams     pl_eop
+):=
+  {
+   messageType:=cref,
+   destLocRef:=pl_DLR,
+   refusalCause:=pl_RefCause,
+   pointer1:=1,
+   optionalPart:=  {
+          calledPAddress:=pl_CalledAddress,
+          data:=pl_Data,
+          importance:=pl_Imp
+      },
+   eop:=pl_eop
+  }
+
+
+//******************************************************************************
+// Message Released (RLSD) (Q713 $4.5)
+//******************************************************************************
+
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template PDU_SCCP_Released t_PDU_SCCP_Released
+(
+         OCT3 pl_DLR,
+         OCT3 pl_SLR,
+         SCCP_param_ReleaseCause  pl_RelCause,
+template SCCP_param_Data_opt pl_Data,
+template SCCP_param_Importance_opt pl_Imp,
+template SCCP_param_EndOfOptionalParams pl_eop
+):=
+  {
+    messageType:=rlsd,
+    destLocRef:=pl_DLR,
+    sourceLocRef:=pl_SLR,
+    releaseCause:=pl_RelCause,
+    pointer1:=1,
+    optionalPart:=  {
+      data:=pl_Data,
+      importance:=pl_Imp
+    },
+    eop:=pl_eop
+  }
+
+//******************************************************************************
+// Message Release Complete (RLC) (Q713 $4.6)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template PDU_SCCP_ReleaseComplete  t_PDU_SCCP_ReleaseComplete
+(
+         OCT3 pl_DLR,
+         OCT3 pl_SLR
+):=
+  {
+    messageType:=rlc,
+    destLocRef:=pl_DLR,
+    sourceLocRef:=pl_SLR
+  }
+
+
+
+//******************************************************************************
+// Message Data form 1 (DT1) (Q713 $4.7)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template           PDU_SCCP_DataForm1  t_PDU_SCCP_DataForm1
+(
+         OCT3 pl_DLR,
+         SCCP_param_SegmentingReassembl pl_SegmReasm,
+         SCCP_param_Data  pl_Data
+):=
+  {
+    messageType:=dt1,
+    destLocRef:=pl_DLR,
+    segmentingReassembl:=pl_SegmReasm,
+    pointer1:=1,
+    data:=pl_Data
+  }
+
+
+
+//******************************************************************************
+// Message Data form 2 (DT2) (Q713 $4.8)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Data Acknowledgement (AK) (Q713 $4.9)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Unitdata (UDT) (Q713 $4.10)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_Unitdata t_PDU_SCCP_Unitdata
+(
+  SCCP_param_ProtocolClass      pl_Proto_Class,
+  SCCP_param_CPartyAddressEnc   pl_CalledAddress,
+  SCCP_param_CPartyAddressEnc   pl_CallingAddress,
+  SCCP_param_Data               pl_Data
+):=
+  {
+    messageType :=udt,
+    protClass   :=pl_Proto_Class,
+    pointer1:=3,
+    pointer2:=0,
+    pointer3:=0,
+    calledPAddress  := pl_CalledAddress,
+    callingPAddress := pl_CallingAddress,
+    data:=pl_Data
+  }
+
+
+
+//******************************************************************************
+// Message Unitdata service (UDTS) (Q713 $4.11)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_UnitdataService  t_PDU_SCCP_UnitdataService
+(
+  SCCP_param_ReturnCause          pl_RetCause,
+  SCCP_param_CPartyAddressEnc     pl_CalledAddress,
+  SCCP_param_CPartyAddressEnc     pl_CallingAddress,
+  SCCP_param_Data                 pl_Data
+):=
+  {
+    messageType:=udts,
+    returnCause:=pl_RetCause,
+    pointer1:=3,
+    pointer2:=0,
+    pointer3:=0,
+    calledPAddress:=pl_CalledAddress,
+    callingPAddress:=pl_CallingAddress,
+    data:=pl_Data
+  }
+
+//******************************************************************************
+// Message Expedited Data (ED) (Q713 $4.12)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Expedited Data Acknowledgement (EA) (Q713 $4.13)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Reset Request (RSR) (Q713 $4.14)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_ResetRequest t_PDU_SCCP_ResetRequest
+(
+         SCCP_param_DestLocalReference        pl_DLR,
+         SCCP_param_SourceLocalReference      pl_SLR,
+         SCCP_param_ResetCause         pl_ResCause
+):=
+  {
+    messageType:=rsr,
+    destLocRef:=pl_DLR,
+    sourceLocRef:=pl_SLR,
+    resetCause:=pl_ResCause
+  }
+
+
+//******************************************************************************
+// Message Reset Confirmation (RSC) (Q713 $4.15)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+  template  PDU_SCCP_ResetConfirm  t_PDU_SCCP_ResetConfirm
+  (
+    SCCP_param_DestLocalReference        pl_DLR,
+    SCCP_param_SourceLocalReference      pl_SLR
+  ):=
+    {
+      messageType:=rsr,
+      destLocRef:=pl_DLR,
+      sourceLocRef:=pl_SLR
+    }
+
+//******************************************************************************
+// Message Protocol data unit error (ERR) (Q713 $4.16)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_ProtDataUnitError t_PDU_SCCP_ProtDataUnitError
+(
+         SCCP_param_DestLocalReference        pl_DLR,
+         SCCP_param_ErrorCause                pl_ErrCause
+):=
+  {
+    messageType:=rsr,
+    destLocRef:=pl_DLR,
+    errorCause:=pl_ErrCause
+  }
+
+
+//******************************************************************************
+// Message Inactivity test (IT) (Q713 $4.17)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template          PDU_SCCP_InactivityTest t_PDU_SCCP_InactivityTest
+(
+         SCCP_param_DestLocalReference        pl_DLR,
+         SCCP_param_SourceLocalReference      pl_SLR,
+         SCCP_param_ProtocolClass             pl_Proto_Class,
+         SCCP_param_SequencingSegmenting      pl_SeqSegm,
+         SCCP_param_Credit                    pl_credit
+):=
+  {
+    messageType:=it,
+    destLocRef:=pl_DLR,
+    sourceLocRef:=pl_SLR,
+    protClass:=pl_Proto_Class,
+    sequencingSegmenting:=pl_SeqSegm,
+    credit:=pl_credit
+  }
+
+
+//******************************************************************************
+// Message Extended Unitdata (XUDT) (Q713 $4.18)
+//******************************************************************************
+//------------------------------------------------------------------------------
+
+template          PDU_SCCP_ExtUnitdata t_PDU_SCCP_ExtUnitdata
+(
+            SCCP_param_ProtocolClass            pl_Proto_Class,
+            SCCP_param_HopCounter               pl_hopCounter,
+            SCCP_param_CPartyAddressEnc         pl_calledPAddress,
+            SCCP_param_CPartyAddressEnc         pl_callingPAddress,
+            SCCP_param_Data                     pl_data,
+template    SCCP_param_Segmentation_opt         pl_segm,
+template    SCCP_param_Importance_opt           pl_imp
+):=
+  {
+    messageType:= xudt,
+    protClass:=pl_Proto_Class,
+    hopCounter:=pl_hopCounter,
+    pointer1:=0,
+    pointer2:=0,
+    pointer3:=0,
+    pointer4:=0,
+    calledPAddress:=pl_calledPAddress,
+    callingPAddress:=pl_callingPAddress,
+    data := pl_data,
+    optionalPart:= {
+      segmentation:=pl_segm,
+      importance := pl_imp
+    },
+    eop:= { paramName:=con_SCCP_eop }
+  }
+
+
+//******************************************************************************
+// Message Extended Unitdata Service(XUDTS) (Q713 $4.19)
+//******************************************************************************
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+
+//******************************************************************************
+// Message Long Unitdata (LUDT) (Q713 $4.20)
+//******************************************************************************
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Long Unitdata Service (LUDTS) (Q713 $4.21)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// SCCP management messages (Q713 $5.3)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+
+}//endgroup PDUTemplateDefinitionsSending
+
+//******************************************************************************
+
+group PDUTemplateDefinitionsReceiving
+{
+
+
+
+//******************************************************************************
+// Message Connection Request (CR) (Q713 $4.2)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+  template           PDU_SCCP_ConnectionRequest tr_PDU_SCCP_ConnectionRequest:=
+  {
+    messageType:=cr,
+    sourceLocRef:=?,
+    protClass:=?,
+    pointer1:=?,
+    pointer2:=?,
+    calledPAddress:=?,
+    optionalPart:=    {
+      credit:=*,
+      callingPAddress:=*,
+      data:=*,
+      hopCounter:=*,
+      importance:=*
+    },
+    eop:=*
+  }
+
+
+
+//******************************************************************************
+// Message Connection Confirm (CC) (Q713 $4.3)
+//******************************************************************************
+
+
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template PDU_SCCP_ConnectionConfirm tr_PDU_SCCP_ConnectionConfirm:=
+{
+  messageType:=cc,
+  destLocRef:=?,
+  sourceLocRef:=?,
+  protClass:=?,
+  pointer1:=?,
+  optionalPart:= {
+    credit:=*,
+    calledPAddress:=*,
+    data:=*,
+    importance:=*
+  },
+  eop:=*
+}
+
+
+//******************************************************************************
+// Message Connection Refused (CREF) (Q713 $4.4)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template  PDU_SCCP_ConnectionRefused tr_PDU_SCCP_ConnectionRefused:=
+{
+  messageType:=cref,
+  destLocRef:=?,
+  refusalCause:=?,
+  pointer1:=?,
+  optionalPart:=  {
+    calledPAddress:=*,
+    data:=*,
+    importance:=*
+  },
+  eop:=*
+}
+
+
+//******************************************************************************
+// Message Released (RLSD) (Q713 $4.5)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template  PDU_SCCP_Released tr_PDU_SCCP_Released:=
+{
+  messageType:=rlsd,
+  destLocRef:=?,
+  sourceLocRef:=?,
+  releaseCause:=?,
+  pointer1:=?,
+  optionalPart:=  {
+    data:=*,
+    importance:=*
+    },
+  eop:=*
+}
+
+
+
+//******************************************************************************
+// Message Release Complete (RLC) (Q713 $4.6)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+
+template          PDU_SCCP_ReleaseComplete  tr_PDU_SCCP_ReleaseComplete:=
+{
+  messageType:=rlc,
+  destLocRef:=?,
+  sourceLocRef:=?
+}
+
+
+
+//******************************************************************************
+// Message Data form 1 (DT1) (Q713 $4.7)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+template           PDU_SCCP_DataForm1  tr_PDU_SCCP_DataForm1:=
+{
+  messageType:=dt1,
+  destLocRef:=?,
+  segmentingReassembl:=?,
+  pointer1:=?,
+  data:=?
+}
+
+//******************************************************************************
+// Message Data form 2 (DT2) (Q713 $4.8)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Data Acknowledgement (AK) (Q713 $4.9)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Unitdata (UDT) (Q713 $4.10)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+
+template          PDU_SCCP_Unitdata tr_PDU_SCCP_Unitdata:=
+{
+  messageType:=udt,
+  protClass:=?,
+  pointer1:=?,
+  pointer2:=?,
+  pointer3:=?,
+  calledPAddress:=?,
+  callingPAddress:=?,
+  data:=?
+}
+
+//******************************************************************************
+// Message Unitdata service (UDTS) (Q713 $4.11)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Message definition
+//------------------------------------------------------------------------------
+
+template          PDU_SCCP_UnitdataService  tr_PDU_SCCP_UnitdataService:=
+{
+  messageType:=udts,
+  returnCause:=?,
+  pointer1:=?,
+  pointer2:=?,
+  pointer3:=?,
+  calledPAddress:=?,
+  callingPAddress:=?,
+  data:=?
+}
+
+//******************************************************************************
+// Message Expedited Data (ED) (Q713 $4.12)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Expedited Data Acknowledgement (EA) (Q713 $4.13)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Reset Request (RSR) (Q713 $4.14)
+//******************************************************************************
+
+template          PDU_SCCP_ResetRequest tr_PDU_SCCP_ResetRequest:=
+{
+  messageType:=rsr,
+  destLocRef:=?,
+  sourceLocRef:=?,
+  resetCause:=?
+}
+
+//******************************************************************************
+// Message Reset Confirmation (RSC) (Q713 $4.15)
+//******************************************************************************
+
+template          PDU_SCCP_ResetConfirm  tr_PDU_SCCP_ResetConfirm:=
+{
+  messageType:=rsr,
+  destLocRef:=?,
+  sourceLocRef:=?
+}
+
+//******************************************************************************
+// Message Protocol data unit error (ERR) (Q713 $4.16)
+//******************************************************************************
+
+template          PDU_SCCP_ProtDataUnitError tr_PDU_SCCP_ProtDataUnitError:=
+{
+  messageType:=rsr,
+  destLocRef:=?,
+  errorCause:=?
+}
+
+//******************************************************************************
+// Message Inactivity test (IT) (Q713 $4.17)
+//******************************************************************************
+
+template          PDU_SCCP_InactivityTest tr_PDU_SCCP_InactivityTest:=
+{
+  messageType:=it,
+  destLocRef:=?,
+  sourceLocRef:=?,
+  protClass:=?,
+  sequencingSegmenting:=?,
+  credit:=?
+}
+
+//******************************************************************************
+// Message Extended Unitdata (XUDT) (Q713 $4.18)
+//******************************************************************************
+
+
+template          PDU_SCCP_ExtUnitdata tr_PDU_SCCP_ExtUnitdata :=
+{
+  messageType:=xudt,
+  protClass:= ?, //connection oriented but no flow control
+  hopCounter:=?,
+  pointer1:=?,
+  pointer2:=?,
+  pointer3:=?,
+  pointer4:=?,
+  calledPAddress:=?,
+  callingPAddress:=?,
+  data := ?,
+  optionalPart:= {
+    segmentation:=*,
+    importance := *
+  },
+  eop:= *
+}
+
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Extended Unitdata Service(XUDTS) (Q713 $4.19)
+//******************************************************************************
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+//******************************************************************************
+// Message Long Unitdata (LUDT) (Q713 $4.20)
+//******************************************************************************
+//------------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// Message Long Unitdata Service (LUDTS) (Q713 $4.21)
+//******************************************************************************
+
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+//******************************************************************************
+// SCCP management messages (Q713 $5.3)
+//******************************************************************************
+//------------------------------------------------------------------------------
+// Not supported
+//------------------------------------------------------------------------------
+
+
+
+}//endgroup PDUTemplateDefinitionsReceiving
+
+type record of boolean Timer_Snapshot;
+type enumerated TimerIdentifierType {conn_est, ias, iar, rel, repeat_rel, int, reset,internal_reset, t_guard};
+
+
+type component SCCP_CT
+{ //startcomponent  SCCP_CT
+
+  //Component variables
+  //***************************************************************
+  // Connection Oriented Signalling:
+  // StateTransition-> ConnectionData;
+  var ConnectionData ConnectionTable[16]; //16 connections 0 to 15
+  var integer   v_session; // actual conn. oriented session index
+
+  // Connectioenless Signalling:
+  //== sending ==
+  var OCT3  segmLocRefTable[16];
+  var integer v_segmLocRefIndex; // last index in segmLocRefTable, cyclical incremented
+  //==receiving==
+  var ClessRcvBuff ClessRcvBuffTable[16];
+
+  var integer    v_reference; // not used ???
+
+  var hexstring v_own_GT;
+  var hexstring v_remote_GT;
+  var integer   v_SSN;
+  var OCT1        v_SIO;
+  var integer     v_NI; //network indicator, if NI<2 => international
+  var integer     v_own_SPC;
+  var integer     v_remote_SPC;
+  var integer     v_SLS;
+
+  var SCCP_ServiceType v_SCCPServiceType; //enum: itu, ansi, ttc or mpt
+  //var v_maxLocalReference; // Local Reference max. value, see in SCCP.ttcn
+  var integer     v_PC_length; //length of point code, calculated at start! NOT USED
+  var integer     v_RoutingLabelLen; //in bytes
+  var integer     v_sccp_data_maxlen; // dt1 payload length upper limit
+  var integer     v_sccp_pdu_maxlen;  // SIF len -routing label len
+  
+  var Timer_Snapshot v_T_conn_est;
+  var Timer_Snapshot v_T_ias;
+  var Timer_Snapshot v_T_iar;
+  var Timer_Snapshot v_T_rel;  
+  var Timer_Snapshot v_T_repeat_rel;  
+  var Timer_Snapshot v_T_int;  
+  var Timer_Snapshot v_T_reset;    
+  var Timer_Snapshot v_T_internal_reset;    
+  var Timer_Snapshot v_T_guard;  
+  //var Timer_Snapshot v_T_T_guard;    
+  //***************************************************************
+
+  port SCCPasp_SP_PT   SCCP_SP_PORT;//port type defined in SCCP_ASPs
+  port MTP3asp_SCCP_PT MTP3_SCCP_PORT;
+
+  //component timers
+
+  timer T_conn_est[cg_TimerArraySize]:= { tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est,
+    tspc_timer_T_conn_est,tspc_timer_T_conn_est };
+
+  timer T_ias[cg_TimerArraySize]:=   { tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias,
+    tspc_timer_T_ias,tspc_timer_T_ias };
+
+  timer T_iar[cg_TimerArraySize]:= { tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar,
+    tspc_timer_T_iar,tspc_timer_T_iar };
+
+  timer T_rel[cg_TimerArraySize]:= { tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel,
+    tspc_timer_T_rel,tspc_timer_T_rel };
+
+  timer T_repeat_rel[cg_TimerArraySize]:= { tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel,
+    tspc_timer_T_repeat_rel,tspc_timer_T_repeat_rel };
+
+  timer T_int[cg_TimerArraySize]:= { tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int,
+    tspc_timer_T_int,tspc_timer_T_int };
+
+
+/*  timer T_T_guard[cg_TimerArraySize]:= { tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard,
+    tspc_timer_T_guard,tspc_timer_T_guard };
+*/    
+
+  timer T_reset[cg_TimerArraySize]:= { tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset,
+    tspc_timer_T_reset,tspc_timer_T_reset };
+
+
+  timer T_internal_reset[cg_TimerArraySize]:= { tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset,
+    tspc_timer_T_internal_reset,tspc_timer_T_internal_reset };
+
+
+  timer T_guard[cg_TimerArraySize]:= { tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard,
+    tspc_timer_guard,tspc_timer_guard };
+
+}//endcomponent  SCCP_CT
+
+
+group SCCPFunctions
+{//startgroup SCCPFunctions
+  //******************************************************************
+  function f_StartTimer(TimerIdentifierType pl_TimerIdentifier,integer pl_TimerIndex,float pl_duration := -1.0) runs on SCCP_CT 
+  //******************************************************************
+  {
+  select (pl_TimerIdentifier)
+    {
+      case(conn_est)
+       {
+         if(pl_duration < 0.0){
+           T_conn_est[pl_TimerIndex].start;
+           v_T_conn_est[pl_TimerIndex] := true;           
+           }
+         else{
+           T_conn_est[pl_TimerIndex].start(pl_duration);   
+           v_T_conn_est[pl_TimerIndex] := true;                         
+         }            
+       }
+      case(ias)
+       {
+        if(pl_duration < 0.0){             
+          T_ias[pl_TimerIndex].start;
+          v_T_ias[pl_TimerIndex] := true;
+          }
+        else{   
+          T_ias[pl_TimerIndex].start(pl_duration);
+          v_T_ias[pl_TimerIndex] := true;          
+         }         
+       }          
+      case(iar)
+       {  
+        if(pl_duration  < 0.0){                  
+          T_iar[pl_TimerIndex].start;
+          v_T_iar[pl_TimerIndex] := true; 
+         }
+        else{  
+          T_iar[pl_TimerIndex].start(pl_duration);
+          v_T_iar[pl_TimerIndex] := true;                    
+         } 
+       }               
+      case(rel) 
+       {  
+        if(pl_duration  < 0.0){                         
+          T_rel[pl_TimerIndex].start;
+          v_T_rel[pl_TimerIndex] := true;  
+          }
+        else{  
+          T_rel[pl_TimerIndex].start(pl_duration);
+          v_T_rel[pl_TimerIndex] := true;                      
+        }              
+       }          
+      case(repeat_rel)
+       {  
+        if(pl_duration  < 0.0){                
+          T_repeat_rel[pl_TimerIndex].start;
+          v_T_repeat_rel[pl_TimerIndex] := true;   
+        }  
+        else{            
+          T_repeat_rel[pl_TimerIndex].start(pl_duration);
+          v_T_repeat_rel[pl_TimerIndex] := true;                     
+        }   
+       }            
+      case(int)  
+       { 
+        if(pl_duration  < 0.0){                
+          T_int[pl_TimerIndex].start;
+          v_T_int[pl_TimerIndex] := true;
+        }
+        else{    
+          T_int[pl_TimerIndex].start(pl_duration);
+          v_T_int[pl_TimerIndex] := true;        
+         }    
+        }            
+      case(reset)
+       { 
+        if(pl_duration  < 0.0){                   
+          T_reset[pl_TimerIndex].start;
+          v_T_reset[pl_TimerIndex] := true; 
+        }
+        else{ 
+          T_reset[pl_TimerIndex].start(pl_duration);
+          v_T_reset[pl_TimerIndex] := true;         
+        }                      
+       }            
+      case(internal_reset) 
+       { 
+        if(pl_duration  < 0.0){                    
+          T_internal_reset[pl_TimerIndex].start;
+          v_T_internal_reset[pl_TimerIndex] := true;  
+        }
+        else{ 
+          T_internal_reset[pl_TimerIndex].start(pl_duration);
+          v_T_internal_reset[pl_TimerIndex] := true;                 
+        }
+       }                 
+      case(t_guard)
+       {
+        if(pl_duration  < 0.0){                     
+          T_guard[pl_TimerIndex].start;
+          v_T_guard[pl_TimerIndex] := true;  
+        }  
+        else{
+          T_guard[pl_TimerIndex].start(pl_duration);
+          v_T_guard[pl_TimerIndex] := true;                      
+        }  
+       }                       
+      case else
+     {log("Warning: Incorrect Timer!")}              
+    }      
+  }
+  //******************************************************************
+  function f_StopTimer(TimerIdentifierType pl_TimerIdentifier,integer pl_TimerIndex) runs on SCCP_CT
+  //******************************************************************
+  {
+  select (pl_TimerIdentifier)
+    {
+      case(conn_est)
+       {
+          T_conn_est[pl_TimerIndex].stop;
+          v_T_conn_est[pl_TimerIndex] := false;
+       }
+      case(ias)
+       {      
+          T_ias[pl_TimerIndex].stop;
+          v_T_ias[pl_TimerIndex] := false;
+       }          
+      case(iar)
+       {      
+          T_iar[pl_TimerIndex].stop;
+          v_T_iar[pl_TimerIndex] := false; 
+       }               
+      case(rel) 
+       {        
+          T_rel[pl_TimerIndex].stop;
+          v_T_rel[pl_TimerIndex] := false;    
+       }          
+      case(repeat_rel)
+       {      
+          T_repeat_rel[pl_TimerIndex].stop;
+          v_T_repeat_rel[pl_TimerIndex] := false;   
+        }            
+      case(int)  
+       {       
+          T_int[pl_TimerIndex].stop;
+          v_T_int[pl_TimerIndex] := false;   
+        }            
+      case(reset)
+       {      
+          T_reset[pl_TimerIndex].stop;
+          v_T_reset[pl_TimerIndex] := false;  
+       }            
+      case(internal_reset) 
+       {       
+          T_internal_reset[pl_TimerIndex].stop;
+          v_T_internal_reset[pl_TimerIndex] := false;  
+       }                 
+      case(t_guard)
+       {        
+          T_guard[pl_TimerIndex].stop;
+          v_T_guard[pl_TimerIndex] := false;  
+       }                  
+      case else
+     {log("Warning: Incorrect Timer!")}              
+    }      
+  }
+  
+  //******************************************************************  
+  function f_initialize_timer_states() runs on SCCP_CT
+  //******************************************************************  
+  {  
+    var integer i;
+    for (i:=0; i<cg_TimerArraySize;i:=i+1) {  
+      v_T_conn_est[i] := false;
+      v_T_ias[i] := false;
+      v_T_iar[i] := false;
+      v_T_rel[i] := false;
+      v_T_repeat_rel[i] := false;
+      v_T_int[i] := false;
+      v_T_reset[i] := false;
+      v_T_internal_reset[i] := false;
+      v_T_guard[i] :=  false;      
+    }
+  }
+
+  //******************************************************************
+  function SCCPStart(MSC_SCCP_MTP3_parameters pl_Boot) runs on SCCP_CT
+  //******************************************************************
+  {
+    //local declarations
+    var integer vl_j;
+
+    //initializes variables  with 'SCCP_CT' visibility/scope
+    v_segmLocRefIndex := 0;
+    v_reference:=0;
+    v_SIO:= bit2oct(pl_Boot.sio.ni & pl_Boot.sio.prio & pl_Boot.sio.si);
+    v_NI := oct2int(v_SIO)/64;
+    v_own_SPC:=pl_Boot.opc;
+    v_remote_SPC:=pl_Boot.dpc;
+    v_SLS:=pl_Boot.sls;
+    v_SCCPServiceType := pl_Boot.sccp_serviceType;
+
+    if (ispresent(pl_Boot.ssn))
+    {
+      v_SSN:=pl_Boot.ssn;
+    }
+    else
+    {
+      v_SSN:=0;
+    }
+    if( (v_SCCPServiceType == mtp3_itu) or
+        (v_SCCPServiceType == mtp3b_itu) )
+    {
+       v_RoutingLabelLen  := 4;
+    }
+    else if( (v_SCCPServiceType == mtp3_ansi) or
+             (v_SCCPServiceType == mtp3b_ansi) )
+    {
+      v_RoutingLabelLen := 7;
+    }
+    else if (  (v_SCCPServiceType == mtp3_ttc) or
+                (v_SCCPServiceType == mtp3b_ttc)  )
+    {
+      if(v_NI>= 2) { v_RoutingLabelLen := 5;  }
+      else { v_RoutingLabelLen := 4;   }
+    }
+    else if( v_SCCPServiceType == m3ua )
+    {
+      v_RoutingLabelLen := 4; // not really...
+      //v_sccp_data_maxlen := 261;
+    }
+    else if (  (v_SCCPServiceType == mtp3_mpt))
+    {
+      if(v_NI== 2) { v_RoutingLabelLen := 7;  }
+      else { v_RoutingLabelLen := 4;   }
+    }
+    else
+    {
+      log( "Wrong SCCPServiceType value was selected in the config file");
+      log("Modified for default value 'mtp3_itu'.");
+      v_SCCPServiceType := mtp3_itu;
+      v_RoutingLabelLen := 4; //itu
+
+    }
+
+    // mtp3_itu_b i.e. itu mtp3b
+    // SCCP_ansi_b i.e ansi mtp3b settings ???
+    //272= max length of SIF, see Fig3-3B/T1.111.4-2001
+    //temp for test: 10 ?
+    //tsp_SIF_MaxLength = 272
+    v_sccp_pdu_maxlen  := tsp_SIF_MaxLength - v_RoutingLabelLen; // -; //7: msg_type+locref+ptr+len
+    log("v_sccp_pdu_maxlen:",v_sccp_pdu_maxlen);
+    v_sccp_data_maxlen := v_sccp_pdu_maxlen-7; // dt1 payload // -7: msg_type+locref+ptr+len
+
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      ConnectionTable[vl_j].localReference :='000000'O;
+      ConnectionTable[vl_j].remoteReference:='000000'O;
+      ConnectionTable[vl_j].state          :=idle;
+      ConnectionTable[vl_j].connectionId   :=0;
+      ConnectionTable[vl_j].reassembler_buffer.buffer :=''O;
+      ConnectionTable[vl_j].reassembler_buffer.actlen := 0;
+      ConnectionTable[vl_j].reassembler_buffer.maxlen := 16*v_sccp_data_maxlen; //????
+      segmLocRefTable[vl_j] := '000000'O;
+      reallocate_ClessRcvBuff(vl_j);
+
+    }//endfor
+
+    //starts SCCP execution
+    ScanEvents();
+  }//endfunction of SCCPStart
+
+
+  //******************************************************************
+  function ReleaseResources(in integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {//startfunction
+
+    //release resources
+    ConnectionTable[pl_session].remoteReference:='000000'O;
+    ConnectionTable[pl_session].localReference:='000000'O;
+    ConnectionTable[pl_session].connectionId:=0;
+    Stop_sessionTimers(pl_session);
+    ConnectionTable[pl_session].state:=idle;
+    ConnectionTable[pl_session].reassembler_buffer.buffer:=''O;
+    ConnectionTable[pl_session].reassembler_buffer.actlen:=0;
+  }//endfunction ReleaseResources
+
+  //******************************************************************
+  function GuardTimer_Expired(in integer pl_session) runs on SCCP_CT
+  //no answer to ASP_SCCP_N_CONNECT_ind received
+  //******************************************************************
+  {//startfunction
+
+    //local declarations
+    var   PDU_SCCP                 vl_PDU_SCCP;
+
+    //Action Table follows
+
+    if (ConnectionTable[pl_session].state==connection_pending_IC)
+    {//startif
+
+      //send Released-this should disconnect the other end
+      vl_PDU_SCCP.released.messageType:=rlsd;
+      vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference;
+      vl_PDU_SCCP.released.releaseCause:=cg_Rel_endUserOrig;
+      vl_PDU_SCCP.released.pointer1:=0;
+      vl_PDU_SCCP.released.optionalPart:=omit;
+      vl_PDU_SCCP.released.eop:=omit;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+      //release resources, return to idle
+      ReleaseResources(pl_session);
+
+    }//endif
+
+  }//endfunction GuardTimer_Expired
+
+
+  //******************************************************************
+  function InternalResetTimer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {//startfunction
+
+    //local declarations
+    var   PDU_SCCP  vl_PDU_SCCP;
+    var   ASP_SCCP_N_RESET_ind       vl_N_RESET_ind;
+
+    //Action Table follows
+
+    if (ConnectionTable[pl_session].state==active)
+    {//startif
+      //send ASP_SCCP_N_RESET_ind
+      //assemble ASP_SCCP_N_ASP
+      vl_N_RESET_ind.originator:=cg_NSP;
+      vl_N_RESET_ind.reason:=cg_DISC_abnormal_T;
+      vl_N_RESET_ind.connectionId:=ConnectionTable[pl_session].connectionId;
+
+      SCCP_SP_PORT.send( t_ASP_N_RESET_ind(
+        vl_N_RESET_ind.originator,
+        vl_N_RESET_ind.reason,
+        vl_N_RESET_ind.connectionId
+        ));//send ASP_SCCP_N_RESET_ind
+        //send Reset Request
+
+      vl_PDU_SCCP.resetreq.messageType:=rsr;
+      vl_PDU_SCCP.resetreq.destLocRef:=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.resetreq.sourceLocRef:=ConnectionTable[pl_session].localReference;
+      vl_PDU_SCCP.resetreq.resetCause:=cg_Res_endUserOrig;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Reset Request
+
+      //start reset timer
+
+      f_StartTimer(reset,pl_session);
+      //restart send inactivity timer
+      f_StopTimer(ias,pl_session);//to avoid warnings
+      f_StartTimer(ias,pl_session);
+      //reset variables etc.
+      //change state
+      ConnectionTable[pl_session].state:=reset_bothway;
+
+    }//endif
+  }//InternalResetTimer_Expired
+
+  //******************************************************************
+  function Reset_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {//startfunction
+
+    //local declarations
+    var   ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+
+    //Action Table follows
+    if (ConnectionTable[pl_session].state==reset_bothway)
+    {//startif
+
+      //assemble ASP_SCCP_N_
+      vl_N_DISCONNECT_ind.originator:=cg_NSP;
+      vl_N_DISCONNECT_ind.reason:=cg_DISC_abnormal_T;
+      vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId;
+
+      SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+        vl_N_DISCONNECT_ind.originator,
+        omit,
+        vl_N_DISCONNECT_ind.reason,
+        omit,
+        vl_N_DISCONNECT_ind.connectionId,
+        omit
+      ));//send ASP_SCCP_N_DISCONNECT_ind
+
+      //release resources, stop inactivity timers, change state to idle
+      ReleaseResources(pl_session);
+    }//endif
+
+  }//Reset_Timer_Expired
+
+  //******************************************************************
+  function Interval_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {//startfunction
+
+    //Action Table follows
+    if (ConnectionTable[pl_session].state==disconnect_pending)
+    {
+      log ("Interval timer expired");
+      //release resources
+      ReleaseResources(pl_session);
+    }
+
+  }//Interval_Timer_Expired
+
+
+
+  //******************************************************************
+  function RepeatRelease_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+
+    //local declarations
+    var   PDU_SCCP  vl_PDU_SCCP;
+
+    //Action Table follows
+    if (ConnectionTable[pl_session].state==disconnect_pending)
+    {
+      //assemble and route MTP3_ASP
+      vl_PDU_SCCP.released.messageType:=rlsd;
+      vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference;
+      vl_PDU_SCCP.released.releaseCause:=cg_Res_endUserOrig;
+      vl_PDU_SCCP.released.pointer1:=0;
+      vl_PDU_SCCP.released.optionalPart:=omit;
+      vl_PDU_SCCP.released.eop:=omit;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+      //restart repeat release timer
+      f_StopTimer(repeat_rel,pl_session);//to avoid warnings
+      f_StartTimer(repeat_rel,pl_session);
+      //no state change, return
+    }
+
+  }//RepeatRelease_Timer_Expired
+
+
+  //******************************************************************
+  function Release_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+
+    //local declarations
+    var   PDU_SCCP  vl_PDU_SCCP;
+
+    //Action Table follows
+    if (ConnectionTable[pl_session].state==disconnect_pending)
+    {
+      //assemble and route MTP3_ASP
+      vl_PDU_SCCP.released.messageType:=rlsd;
+      vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference;
+      vl_PDU_SCCP.released.releaseCause:=cg_Res_endUserOrig;//?
+      vl_PDU_SCCP.released.pointer1:=0;
+      vl_PDU_SCCP.released.optionalPart:=omit;
+      vl_PDU_SCCP.released.eop:=omit;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+      f_StartTimer(repeat_rel,pl_session);
+      f_StartTimer(int,pl_session);
+      //no state change, return
+
+    }//endif
+
+  }//Release_Timer_Expired
+
+
+  //******************************************************************
+  function ReceiveInactivity_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+    //local declarations
+    var   PDU_SCCP                   vl_PDU_SCCP;
+    var   ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    //Action Table follows
+    if (ConnectionTable[pl_session].state==idle){}
+    else if (ConnectionTable[pl_session].state==active)
+    {
+      //assemble ASP_SCCP_N_
+      vl_N_DISCONNECT_ind.originator:=cg_NSP;
+      vl_N_DISCONNECT_ind.reason:=cg_DISC_endUserFailure;//?
+      vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId;
+
+      SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+         vl_N_DISCONNECT_ind.originator,
+         omit,
+         vl_N_DISCONNECT_ind.reason,
+         omit,
+         vl_N_DISCONNECT_ind.connectionId,
+         omit
+      ));//send ASP_SCCP_N_DISCONNECT_ind
+
+      //stop inactivity timers
+      f_StopTimer(ias,pl_session);
+      f_StopTimer(iar,pl_session);
+
+      //assemble and route MTP3_ASP
+
+      vl_PDU_SCCP.released.messageType:=rlsd;
+      vl_PDU_SCCP.released.destLocRef:=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[pl_session].localReference;
+      vl_PDU_SCCP.released.releaseCause:=cg_Rel_expRecInacTimer;
+      vl_PDU_SCCP.released.pointer1:=0;// No options
+      vl_PDU_SCCP.released.optionalPart:=omit;
+      vl_PDU_SCCP.released.eop:=omit;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+      //start release timer
+      f_StartTimer(rel,pl_session);
+      ConnectionTable[pl_session].state:=disconnect_pending;
+
+    }//endif
+
+  }//ReceiveInactivity_Timer_Expired
+
+
+  //******************************************************************
+  function SendInactivity_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+
+    //local declarations
+    var   PDU_SCCP             vl_PDU_SCCP;
+
+    //Action Table follows
+
+    if (ConnectionTable[pl_session].state==active)
+    {
+
+      //assemble and route MTP3_ASP
+      vl_PDU_SCCP.inacttest.messageType :=it;
+      vl_PDU_SCCP.inacttest.destLocRef  :=ConnectionTable[pl_session].remoteReference;
+      vl_PDU_SCCP.inacttest.sourceLocRef:=ConnectionTable[pl_session].localReference;
+
+      vl_PDU_SCCP.inacttest.protClass:={
+        class:='0010'B,
+        messageHandling:='0000'B
+      };//protocol class 2
+
+      vl_PDU_SCCP.inacttest.sequencingSegmenting:={
+        reserved:='0'B,
+        p_s:='0000000'B,
+        more:='0'B,
+        pr:='0000000'B
+      };//it will be ignored
+
+      vl_PDU_SCCP.inacttest.credit:='00'O;
+      //Param name credit(9), length 1, credit 0 -it will be mercifully ignored anyhow
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send inactivity test
+
+      //restart send inactivity timer
+      f_StopTimer(ias,pl_session);//to avoid warnings
+      f_StartTimer(ias,pl_session);
+
+    }//endif
+
+  }//endfunction
+
+  //******************************************************************
+  function Conn_Timer_Expired(integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+
+    //local declarations
+    var        ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    if (ConnectionTable[pl_session].state==connection_pending_OG)
+    {
+      //assemble ASP_SCCP_N_
+      vl_N_DISCONNECT_ind.originator:=cg_NSP;
+      vl_N_DISCONNECT_ind.reason:=cg_DISC_abnormal_T;
+      vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[pl_session].connectionId;
+
+      SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+          vl_N_DISCONNECT_ind.originator,
+          omit,
+          vl_N_DISCONNECT_ind.reason,
+          omit,
+          vl_N_DISCONNECT_ind.connectionId,
+          omit
+          ));//send ASP_SCCP_N_DISCONNECT_ind
+
+          //release resources
+      ReleaseResources(pl_session);
+    }
+    else if (ConnectionTable[pl_session].state==wait_conn_confirm)
+    {
+      ReleaseResources(pl_session);
+    }
+
+  }//Conn_Timer_Expired
+
+  //******************************************************************
+  function GenerateLocalReference()  runs on SCCP_CT return OCT3
+  //******************************************************************
+  {
+    var OCT3 vl_LocalReference;
+
+    do
+    {
+      vl_LocalReference := int2oct(float2int(rnd()*tsp_maxLocalReference), 3 );
+    }
+    while ( Retrieve_session( vl_LocalReference ) != -1 );
+    return vl_LocalReference;
+
+  }//GenerateLocalReference
+
+  //******************************************************************
+  function GenerateConnectionId()  runs on SCCP_CT return integer
+  //******************************************************************
+  {
+    var integer vl_ConnectionId;
+
+    do { vl_ConnectionId := float2int(rnd()*tsp_max_ConnectionId); }
+    while ( Retrieve_session_connectionId(  vl_ConnectionId ) != -1 );
+
+    return vl_ConnectionId;
+  }//GenerateConnectionId
+
+  //******************************************************************
+  function Stop_sessionTimers ( integer pl_session) runs on SCCP_CT
+  //******************************************************************
+  {
+    if (T_conn_est[pl_session].running)
+      { f_StopTimer(conn_est,pl_session);}
+    if (T_ias[pl_session].running)
+      { f_StopTimer(ias,pl_session);}
+    if (T_iar[pl_session].running)
+      { f_StopTimer(iar,pl_session);}
+    if (T_rel[pl_session].running)
+      { f_StopTimer(rel,pl_session);}
+    if (T_repeat_rel[pl_session].running)
+      { f_StopTimer(repeat_rel,pl_session);}
+    if (T_int[pl_session].running)
+      { f_StopTimer(int,pl_session);}
+   // if (T_T_guard[pl_session].running)
+   //   { f_StopTimer(t_t_guard,pl_session);}
+    if (T_reset[pl_session].running)
+      { f_StopTimer(reset,pl_session);}
+    //T_reassembly[pl_session].stop;
+
+  }//Stop_sessionTimers
+
+  //******************************************************************
+  function CheckIdleIndividuals()  runs on SCCP_CT return integer
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+       if (ConnectionTable[vl_j].state==idle)
+       {
+         log("First idle individual index:",vl_j);
+         return vl_j;
+       }
+    }
+
+    return -1;
+
+  }//CheckIdleIndividuals
+
+  //******************************************************************
+  function ConnectionAlreadyEstablished(  OCT3 pl_LocRef) runs on SCCP_CT  return boolean
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if (ConnectionTable[vl_j].localReference==pl_LocRef)
+      {
+        return true;
+      }
+    }
+    return false;
+
+  } //ConnectionAlreadyEstablished
+
+  //******************************************************************
+  function ConnectionAlreadyEstablished_remote(  OCT3 pl_LocRef)  runs on SCCP_CT return boolean
+  //******************************************************************
+  {
+    var integer vl_j;
+
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if (ConnectionTable[vl_j].remoteReference==pl_LocRef)
+      {
+        return true;
+      }
+    }
+    return false;
+
+  } //ConnectionAlreadyEstablished_remote
+
+  //******************************************************************
+  function ConnectionAlreadyEstablished_connectionId(integer pl_ConnId) runs on SCCP_CT  return boolean
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if (ConnectionTable[vl_j].connectionId==pl_ConnId)
+      {
+        return true;
+      }
+    }
+
+    return false;
+
+  } //ConnectionAlreadyEstablished_connectionId
+
+  //******************************************************************
+  function Retrieve_session(  OCT3 pl_LocRef ) runs on SCCP_CT  return integer
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+
+      if (ConnectionTable[vl_j].localReference==pl_LocRef)
+      {
+        log("Session index based on local reference:",vl_j);
+        return vl_j;
+      }
+    }
+
+    return -1;
+
+  } //Retrieve_session
+
+  //******************************************************************
+  function Retrieve_session_remote(  OCT3 pl_LocRef )
+  runs on SCCP_CT return integer
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if (ConnectionTable[vl_j].remoteReference==pl_LocRef)
+      {
+        log("Session index based on remote reference:",vl_j);
+        return vl_j;
+      }
+    }
+    return -1;
+
+  } //Retrieve_session_remote
+
+  //******************************************************************
+  function Retrieve_session_connectionId(  integer pl_ConnId )
+  runs on SCCP_CT return integer
+  //******************************************************************
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if (ConnectionTable[vl_j].connectionId==pl_ConnId)
+      {
+        log("Session index based on connection ID:",vl_j);
+        return vl_j;
+      }
+    }
+    return -1;
+
+  } //Retrieve_session_connectionId
+
+  //==================================================================
+  // Connectionless Segmented Data Handling/
+  //==================================================================
+  //==================================================================
+  // SENDING: SCCP->MTP3 Segmentation Local Reference Handling
+  // Handles segmLocRefTable,v_segmLocRefIndex,
+  // which are defined in SCCP_typedefs.ttcn
+  //==================================================================
+
+  //******************************************************************
+  //function exist_segmLocalRef
+  //******************************************************************
+
+  function exist_segmLocalRef( in OCT3 pl_segLocRef)
+  runs on SCCP_CT return boolean
+  {
+    if( get_segmLocalRefIndex(pl_segLocRef) == -1 ) { return false;}
+    else { return true; };
+  } //exist_segmLocalRef
+
+  //******************************************************************
+  //function get_segLocalRefIndex
+  //******************************************************************
+
+  function get_segmLocalRefIndex(in OCT3 pl_segmLocRef)
+  runs on SCCP_CT return integer
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if( segmLocRefTable[vl_j] == pl_segmLocRef ) { return vl_j;}
+    }
+    return -1;
+  }//get_segLocalRefIndex
+
+  //******************************************************************
+  //function reset_segmLocalRef
+  //******************************************************************
+  function reset_segmLocalRef(in OCT3 pl_segmLocRef)
+  runs on SCCP_CT
+  {
+    var integer vl_j;
+    vl_j:= get_segmLocalRefIndex( pl_segmLocRef )
+    segmLocRefTable[vl_j] := '000000'O;
+  }
+
+  //******************************************************************
+  // function create_segmLocalRef
+  //******************************************************************
+
+  function create_segmLocalRef()
+  runs on SCCP_CT return OCT3
+  {
+    var OCT3 vl_segmLocRef;
+    v_segmLocRefIndex := (v_segmLocRefIndex +1) mod 16;
+    do
+    {
+      vl_segmLocRef := int2oct(float2int( rnd() *tsp_maxLocalReference), 3 );
+    }
+    while ( exist_segmLocalRef( vl_segmLocRef ) );
+
+    return vl_segmLocRef;
+  }//create_segmLocalRef
+
+  //==================================================================
+  // RECEIVING CONNECTIONLESS PDUs BY SCCP
+  //==================================================================
+
+  //******************************************************************
+  //function exist_ClessRcvBuff
+  //******************************************************************
+  function exist_ClessRcvBuff( in OCT3 pl_segmRemRef)
+  runs on SCCP_CT return boolean
+  {
+    if( get_ClessRcvBuffIndex(pl_segmRemRef) == -1 ) { return false;}
+    else { return true; };
+  } //exist_ClessRcvBuff
+
+  //******************************************************************
+  //function get_segRemoteRefIndex
+  //******************************************************************
+  function get_ClessRcvBuffIndex(in OCT3 pl_segmRemRef)
+  runs on SCCP_CT return integer
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if( ClessRcvBuffTable[vl_j].segmRemoteRef == pl_segmRemRef )
+      { return vl_j;}
+    }
+    return -1;
+  }//get_ClessRcvBuffIndex
+
+  //******************************************************************
+  //function get_idle_ClessRcvBuffIndex
+  //******************************************************************
+  function get_idle_ClessRcvBuffIndex( )
+  runs on SCCP_CT return integer
+  {
+    var integer vl_j;
+    for (vl_j:=0;vl_j<16;vl_j:=vl_j+1)
+    {
+      if( ClessRcvBuffTable[vl_j].state == segmLocRef_idle ) { return vl_j;}
+    }
+    return -1;
+  }//get_idle_ClessRcvBuffIndex
+
+  //******************************************************************
+  //function allocate_ClessRcvBuff
+  //******************************************************************
+  function allocate_ClessRcvBuff(in OCT3 pl_segmRemRef)
+  runs on SCCP_CT return integer
+  {
+    var OCT3 vl_segmRemRef;
+    var integer vl_j;
+
+    if( exist_ClessRcvBuff(pl_segmRemRef) ){ return -1;};
+
+    vl_j := get_idle_ClessRcvBuffIndex();
+    ClessRcvBuffTable[vl_j].state := segmLocRef_busy;
+    ClessRcvBuffTable[vl_j].segmRemoteRef := pl_segmRemRef;
+    ClessRcvBuffTable[vl_j].reassembler_buffer.buffer:=''O;
+    ClessRcvBuffTable[vl_j].reassembler_buffer.actlen:=0;
+    return vl_j;
+
+  }//allocate_ClessRcvBuff
+  //******************************************************************
+  //function reallocate_ClessRcvBuff
+  //******************************************************************
+  function reallocate_ClessRcvBuff(in  integer pl_index )
+  runs on SCCP_CT
+  {
+    ClessRcvBuffTable[pl_index].state := segmLocRef_idle;
+    // maybe unnecessaryy
+    ClessRcvBuffTable[pl_index].segmRemoteRef := '000000'O;
+    ClessRcvBuffTable[pl_index].reassembler_buffer.buffer:=''O;
+    ClessRcvBuffTable[pl_index].reassembler_buffer.actlen:=0;
+    return;
+  }
+
+  //******************************************************************
+  //function store_segmData
+  //******************************************************************
+  function store_segmData(in  integer pl_index, in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata)
+  runs on SCCP_CT
+  {
+    ClessRcvBuffTable[pl_index].reassembler_buffer.buffer:=
+      ClessRcvBuffTable[pl_index].reassembler_buffer.buffer&
+      pl_PDU_SCCP_ExtUnitdata.data.data;
+    ClessRcvBuffTable[pl_index].reassembler_buffer.actlen:=
+      ClessRcvBuffTable[pl_index].reassembler_buffer.actlen+
+      pl_PDU_SCCP_ExtUnitdata.data.paramLength;
+  } //store_segmData
+
+  //******************************************************************
+  //function send_ClessRcvBuff_in_N_UNITDATAind
+  //******************************************************************
+  function send_ClessRcvBuff_in_N_UNITDATAind (
+    in integer pl_index,
+    in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata)
+  runs on SCCP_CT
+  {
+      var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+
+      vl_N_UNITDATA_ind.calledAddress  :=
+        ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.calledPAddress );
+
+      vl_N_UNITDATA_ind.callingAddress :=
+        ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.callingPAddress );
+
+      vl_N_UNITDATA_ind.sequenceControl:=
+        '0000000'B&pl_PDU_SCCP_ExtUnitdata.protClass.class[3];
+      if( pl_PDU_SCCP_ExtUnitdata.protClass.messageHandling == '1000'B )
+      { vl_N_UNITDATA_ind.returnOption   := '00000001'B; }
+      else
+      { vl_N_UNITDATA_ind.returnOption   := '00000000'B; }
+
+      vl_N_UNITDATA_ind.userData := ClessRcvBuffTable[pl_index].reassembler_buffer.buffer;
+
+      vl_N_UNITDATA_ind.importance := omit;
+
+      SCCP_SP_PORT.send( vl_N_UNITDATA_ind );
+
+      return;
+  }//send_ClessRcvBuff_in_N_UNITDATAind
+
+  //******************************************************************
+  //function send_ClessData_in_N_UNITDATAind
+  // unbuffered data sending
+  //******************************************************************
+
+  function send_ClessData_in_N_UNITDATAind (
+    in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata)
+  runs on SCCP_CT
+  {
+      var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+
+      vl_N_UNITDATA_ind.calledAddress  :=
+        ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.calledPAddress );
+
+      vl_N_UNITDATA_ind.callingAddress :=
+        ConvertPDUEncodedAddressToASPAddress( pl_PDU_SCCP_ExtUnitdata.callingPAddress );
+
+      vl_N_UNITDATA_ind.sequenceControl:=
+        '0000000'B&pl_PDU_SCCP_ExtUnitdata.protClass.class[3];
+      if( pl_PDU_SCCP_ExtUnitdata.protClass.messageHandling == '1000'B )
+      { vl_N_UNITDATA_ind.returnOption   := '00000001'B; }
+      else
+      { vl_N_UNITDATA_ind.returnOption   := '00000000'B; }
+
+      vl_N_UNITDATA_ind.userData := pl_PDU_SCCP_ExtUnitdata.data.data;
+
+      vl_N_UNITDATA_ind.importance := omit;
+
+      SCCP_SP_PORT.send( vl_N_UNITDATA_ind );
+      return;
+  }//send_ClessData_in_N_UNITDATAind
+
+  //******************************************************************
+  //  CONN.ORIENTED SEGMENTING/REASSEMBLING
+  //******************************************************************
+
+  //******************************************************************
+  // SEGMENTING
+  //******************************************************************
+
+  //******************************************************************
+  // function sending_dataform1s_in_ASP_MTP_TRANSFERreqs
+  // segmentates data and sends segments in dataform1 messages
+  // included in asp_MTP3_TRANSFERreq PDUs
+  // == segmentation - connection oriented case ==
+  // counterpair: buffered_sending_ASP_N_DATA_ind
+  //******************************************************************
+  function sending_dataform1s_in_ASP_MTP_TRANSFERreqs( in ASP_SCCP_N_DATA_req pl_N_DATA_req )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var integer vl_len;
+    var integer vl_actdatalen;
+    var SCCP_PAR_UserData vl_data;
+    var integer vl_from; // first position in vl_data to be sent
+    vl_data := pl_N_DATA_req.userData;
+    vl_from := 0;
+    // fixed part of messages:
+    vl_PDU_SCCP.dataform1.messageType:=dt1;
+    vl_PDU_SCCP.dataform1.destLocRef:=ConnectionTable[v_session].remoteReference;
+    vl_PDU_SCCP.dataform1.segmentingReassembl:={
+      more:='1'B,
+      reserved:='0000000'B
+    };
+    vl_PDU_SCCP.dataform1.pointer1:=1;
+    // variable part of messages:
+    vl_len := lengthof(vl_data);
+
+    while ( vl_len > 0 )
+    {
+
+      log("vl_len:",vl_len);
+      log("vl_from",vl_from);
+      if(vl_len > v_sccp_data_maxlen)
+      {
+        vl_actdatalen := v_sccp_data_maxlen;
+        vl_PDU_SCCP.dataform1.segmentingReassembl.more :='1'B;
+      }
+      else
+      {
+        vl_actdatalen := vl_len;
+        vl_PDU_SCCP.dataform1.segmentingReassembl.more :='0'B;
+      };
+
+      vl_PDU_SCCP.dataform1.data.data:= substr( vl_data, vl_from, vl_actdatalen);
+      vl_PDU_SCCP.dataform1.data.paramLength:= vl_actdatalen;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Data Form1
+
+      log( "data sent by MTP3_SCCP_PORT: ",vl_PDU_SCCP.dataform1.data.data);
+
+      //restart send inactivity timer
+      f_StopTimer(ias,v_session);//to avoid warnings
+      f_StartTimer(ias,v_session);
+
+      vl_from := vl_from + vl_actdatalen;
+      vl_len  := vl_len  - vl_actdatalen;
+
+    }//while
+  } //sending_dataform1s_in_ASP_MTP_TRANSFERreqs
+
+  //******************************************************************
+  // REASSEMBLING
+  //******************************************************************
+
+  //******************************************************************
+  // function buffered_sending_ASP_N_DATA_ind
+  // counterpair of sending_dataform1s_in_ASP_MTP_TRANSFERreqs
+  //******************************************************************
+
+  function buffered_sending_ASP_N_DATA_ind( in PDU_SCCP_DataForm1 pl_PDU_SCCP_DataForm1 )
+  runs on SCCP_CT
+  {
+    // Investigate this shorcut (not implemented):
+    // if actlen==0 and more==0=> send immediately
+
+    // DT1 should be put to the reassembly buffer
+    var integer vl_newbufflen;
+    log("DT1 will be put to the reassembly buffer");
+    //log( ConnectionTable[v_session].connectionId );
+    vl_newbufflen := ConnectionTable[v_session].reassembler_buffer.actlen +
+      pl_PDU_SCCP_DataForm1.data.paramLength;
+
+    if( vl_newbufflen <=  ConnectionTable[v_session].reassembler_buffer.maxlen)
+    {
+      ConnectionTable[v_session].reassembler_buffer.buffer :=
+        ConnectionTable[v_session].reassembler_buffer.buffer &
+        pl_PDU_SCCP_DataForm1.data.data;
+      ConnectionTable[v_session].reassembler_buffer.actlen := vl_newbufflen;
+      log("DT1 data has been put to the reassembly buffer");
+    }
+    else
+    {
+      //send as much as possible OR error ???? NOT READY YET !!!!
+      //CONT HERE, ask LAFA
+      log("Unexpected/unimplemented program branch");
+    }
+
+    // sending:
+    if( pl_PDU_SCCP_DataForm1.segmentingReassembl.more == '0'B )
+    {
+      log("DT1/segmentingReassembl/more==0 received=> send ASP_SCCP_N_DATA comes");
+      //send:
+      SCCP_SP_PORT.send( t_ASP_N_DATA_ind(
+        ConnectionTable[v_session].reassembler_buffer.buffer,
+        ConnectionTable[v_session].connectionId,
+        omit));
+
+      //restart send inactivity timer
+      f_StopTimer(ias,v_session);//to avoid warnings
+      f_StartTimer(ias,v_session);
+
+      // clear the buffer:
+      ConnectionTable[v_session].reassembler_buffer.buffer :=''O;
+      ConnectionTable[v_session].reassembler_buffer.actlen := 0;
+    }
+    else
+    {
+      log("DT1/segmentingReassembl/more==1 received=> sent to buffer only");
+    }
+  }//buffered_sending_ASP_N_DATA_ind
+
+
+  //******************************************************************
+  //    CONVERSIONS
+  //******************************************************************
+  //
+  // Differences between standards are hidden here !!!!
+  //
+  // 3 different functions working on different structures with the
+  // virtually indentical code
+
+  //******************************************************************
+  // Functions coding ASP address into octetstream
+  //******************************************************************
+
+  // ITU
+
+  function ConvertASPAddressToEncodedAddress_itu( in SCCP_PAR_Address pl_ASPAddress)
+    runs on SCCP_CT
+    return SCCP_param_CPartyAddressEnc
+  {
+
+    var SCCP_param_CPartyAddress_itu vl_PDUAddress; //structured fit to encoding
+    var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
+
+    vl_PDUAddress.addressIndicator.pointCodeIndic:=
+      pl_ASPAddress.addressIndicator.pointCodeIndic;
+
+    vl_PDUAddress.addressIndicator.ssnIndicator:=
+      pl_ASPAddress.addressIndicator.ssnIndicator;
+
+    vl_PDUAddress.addressIndicator.globalTitleIndic:=
+     pl_ASPAddress.addressIndicator.globalTitleIndic;
+
+    vl_PDUAddress.addressIndicator.routingIndicator:=
+      pl_ASPAddress.addressIndicator.routingIndicator;
+
+    vl_PDUAddress.addressIndicator.reserved:='0'B;
+    // if (ischosen(pl_ASPAddress.signPointCode) ) not used because it is mandatory field (???)
+
+    //----signPointCode handling
+    if ( ispresent( pl_ASPAddress.signPointCode )) {
+      vl_PDUAddress.signPointCode :=
+        '00'B&pl_ASPAddress.signPointCode;
+    } else {
+      vl_PDUAddress.signPointCode := omit;
+    };
+
+    //----subsystemNumber handling
+    if ( ispresent( pl_ASPAddress.subsystemNumber ) ){
+      vl_PDUAddress.subsystemNumber := pl_ASPAddress.subsystemNumber;
+    } else {
+      vl_PDUAddress.subsystemNumber :=omit;
+    };
+
+    // --- globalTitle handling--
+    if ( ispresent(pl_ASPAddress.globalTitle))
+    {//startif1
+
+      var SCCP_ASPfield_GlobalTitle tmpGT ;
+      tmpGT := pl_ASPAddress.globalTitle;
+
+      if (ischosen(tmpGT.gti0001))
+      {
+        vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven;
+        vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0010))
+      {
+        vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType;
+        vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0011))
+      {
+        vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType;
+        vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0100))
+      {
+        vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType;
+        vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0100.reserved:='0'B;
+        vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress;
+      }
+    }
+    else
+    {
+        vl_PDUAddress.globalTitle := omit;
+    };
+
+    vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_itu( vl_PDUAddress);
+    vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr);
+
+    return vl_PDUAddressEncoded;
+
+  } //ConvertASPAddressToEncodedAddress_itu
+
+  //******************************************************************
+
+  // ANSI
+  function ConvertASPAddressToEncodedAddress_ansi(in SCCP_PAR_Address pl_ASPAddress)
+    runs on SCCP_CT return SCCP_param_CPartyAddressEnc
+    {
+
+    var SCCP_param_CPartyAddress_ansi  vl_PDUAddress; //structured fit to encoding
+    var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
+
+    vl_PDUAddress.addressIndicator.pointCodeIndic:=
+      pl_ASPAddress.addressIndicator.pointCodeIndic;
+
+    vl_PDUAddress.addressIndicator.ssnIndicator:=
+      pl_ASPAddress.addressIndicator.ssnIndicator;
+
+    vl_PDUAddress.addressIndicator.globalTitleIndic:=
+     pl_ASPAddress.addressIndicator.globalTitleIndic;
+
+    vl_PDUAddress.addressIndicator.routingIndicator:=
+      pl_ASPAddress.addressIndicator.routingIndicator;
+
+    vl_PDUAddress.addressIndicator.reserved:='1'B;
+
+    //----signPointCode handling
+    if ( ispresent( pl_ASPAddress.signPointCode )){
+      vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode;
+    } else {
+      vl_PDUAddress.signPointCode := omit;
+    };
+
+    //----subsystemNumber handling
+    if ( ispresent( pl_ASPAddress.subsystemNumber )) {
+      vl_PDUAddress.subsystemNumber:=pl_ASPAddress.subsystemNumber;
+    } else {
+      vl_PDUAddress.subsystemNumber :=omit;
+    };
+
+    if (ispresent(pl_ASPAddress.globalTitle))
+    {//startif1
+
+      var SCCP_ASPfield_GlobalTitle tmpGT := pl_ASPAddress.globalTitle;
+
+
+      if (ischosen(tmpGT.gti0010))
+      {
+        vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType;
+        vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0011)) //ansi gti001, meaning:
+                                        //used GT: SCCP_field_GlobalTitle_TT_NP_ES
+      {
+        //the left side is ANSI!!!:
+        vl_PDUAddress.globalTitle.gti0001.translationType:=tmpGT.gti0011.translationType;
+        vl_PDUAddress.globalTitle.gti0001.encodingScheme:=tmpGT.gti0011.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0001.numberingPlan:=tmpGT.gti0011.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress;
+      };
+
+    }
+    else
+    {
+        vl_PDUAddress.globalTitle := omit;
+    };
+
+    // SCCP_param_CPartyAddress_ansi -> octetstring
+    vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_ansi( vl_PDUAddress);
+    vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr);
+
+    return vl_PDUAddressEncoded
+
+  } //ConvertASPAddressToEncodedAddress_ansi
+
+  // ttc national:
+
+  function ConvertASPAddressToEncodedAddress_ttc( in SCCP_PAR_Address pl_ASPAddress)
+    runs on SCCP_CT
+    return SCCP_param_CPartyAddressEnc
+  {
+
+    var SCCP_param_CPartyAddress_ttc vl_PDUAddress; //structured fit to encoding
+    var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
+
+    vl_PDUAddress.addressIndicator.pointCodeIndic:=
+      pl_ASPAddress.addressIndicator.pointCodeIndic;
+
+    vl_PDUAddress.addressIndicator.ssnIndicator:=
+      pl_ASPAddress.addressIndicator.ssnIndicator;
+
+    vl_PDUAddress.addressIndicator.globalTitleIndic:=
+     pl_ASPAddress.addressIndicator.globalTitleIndic;
+
+    vl_PDUAddress.addressIndicator.routingIndicator:=
+      pl_ASPAddress.addressIndicator.routingIndicator;
+
+    vl_PDUAddress.addressIndicator.reserved:='1'B;
+
+    //----signPointCode handling
+    if ( ispresent( pl_ASPAddress.signPointCode )) {
+      vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode;
+    } else {
+      vl_PDUAddress.signPointCode := omit;
+    };
+
+    //----subsystemNumber handling
+    if ( ispresent( pl_ASPAddress.subsystemNumber ) ){
+      vl_PDUAddress.subsystemNumber:= pl_ASPAddress.subsystemNumber;
+    } else {
+      vl_PDUAddress.subsystemNumber :=omit;
+    };
+
+    // --- globalTitle handling--
+    if ( ispresent(pl_ASPAddress.globalTitle))
+    {//startif1
+
+      var SCCP_ASPfield_GlobalTitle tmpGT ;
+      tmpGT := pl_ASPAddress.globalTitle;
+
+      if (ischosen(tmpGT.gti0001))
+      {
+        vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven;
+        vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0010))
+      {
+        vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType;
+        vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0011))
+      {
+        vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType;
+        vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0100))
+      {
+        vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType;
+        vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0100.reserved:='0'B;
+        vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress;
+      };
+    }
+    else
+    {
+        vl_PDUAddress.globalTitle := omit;
+    };
+
+    vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_ttc( vl_PDUAddress);
+    vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr);
+
+    return vl_PDUAddressEncoded;
+
+  } //ConvertASPAddressToEncodedAddress_ttc
+
+  // mpt national:
+
+  function ConvertASPAddressToEncodedAddress_mpt( in SCCP_PAR_Address pl_ASPAddress)
+    runs on SCCP_CT
+    return SCCP_param_CPartyAddressEnc
+  {
+
+    var SCCP_param_CPartyAddress_mpt vl_PDUAddress; //structured fit to encoding
+    var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
+
+    vl_PDUAddress.addressIndicator.pointCodeIndic:=
+      pl_ASPAddress.addressIndicator.pointCodeIndic;
+
+    vl_PDUAddress.addressIndicator.ssnIndicator:=
+      pl_ASPAddress.addressIndicator.ssnIndicator;
+
+    vl_PDUAddress.addressIndicator.globalTitleIndic:=
+     pl_ASPAddress.addressIndicator.globalTitleIndic;
+
+    vl_PDUAddress.addressIndicator.routingIndicator:=
+      pl_ASPAddress.addressIndicator.routingIndicator;
+
+    vl_PDUAddress.addressIndicator.reserved:='1'B;
+
+    //----signPointCode handling
+    if ( ispresent( pl_ASPAddress.signPointCode )) {
+      vl_PDUAddress.signPointCode := pl_ASPAddress.signPointCode;
+    } else {
+      vl_PDUAddress.signPointCode := omit;
+    };
+
+    //----subsystemNumber handling
+    if ( ispresent( pl_ASPAddress.subsystemNumber ) ){
+      vl_PDUAddress.subsystemNumber:= pl_ASPAddress.subsystemNumber;
+    } else {
+      vl_PDUAddress.subsystemNumber :=omit;
+    };
+
+    // --- globalTitle handling--
+    if ( ispresent(pl_ASPAddress.globalTitle))
+    {//startif1
+
+      var SCCP_ASPfield_GlobalTitle tmpGT ;
+      tmpGT := pl_ASPAddress.globalTitle;
+
+      if (ischosen(tmpGT.gti0001))
+      {
+        vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven;
+        vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0010))
+      {
+        vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType;
+        vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0011))
+      {
+        vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType;
+        vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress;
+      }
+      else if (ischosen(tmpGT.gti0100))
+      {
+        vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType;
+        vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme;
+        vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan;
+        vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress;
+        vl_PDUAddress.globalTitle.gti0100.reserved:='0'B;
+        vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress;
+      };
+    }
+    else
+    {
+        vl_PDUAddress.globalTitle := omit;
+    };
+
+    vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_mpt( vl_PDUAddress);
+    vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr);
+
+    return vl_PDUAddressEncoded;
+
+  } //ConvertASPAddressToEncodedAddress_mpt
+
+  //******************************************************************
+
+  //******************************************************************
+  // CONVERSION / DECODING
+  //******************************************************************
+
+  //******************************************************************
+  // function ConvertPDUEncodedAddressToASPAddress_itu
+  // converts Encoded PDU Address into sturctured ASP Address
+  // according to ITU
+  //******************************************************************
+  function ConvertPDUEncodedAddressToASPAddress_itu( in SCCP_param_CPartyAddressEnc pl_PDUAddress)
+    runs on SCCP_CT return SCCP_PAR_Address
+  {
+    var SCCP_PAR_Address  vl_ASPAddress;
+    var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc
+    var SCCP_param_CPartyAddress_itu vl_PDUAddress;
+
+    //new code detail (ethbaat 2003.11.04:
+    // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu":
+    vl_PDUAddress := dec_PDU_SCCP_Address_itu( pl_PDUAddress.addr );
+
+    vl_ASPAddress.addressIndicator.pointCodeIndic   :=
+      vl_PDUAddress.addressIndicator.pointCodeIndic;
+
+    vl_ASPAddress.addressIndicator.ssnIndicator     :=
+      vl_PDUAddress.addressIndicator.ssnIndicator;
+
+    vl_ASPAddress.addressIndicator.globalTitleIndic :=
+      vl_PDUAddress.addressIndicator.globalTitleIndic;
+
+    vl_ASPAddress.addressIndicator.routingIndicator :=
+      vl_PDUAddress.addressIndicator.routingIndicator;
+
+    if (ispresent ( vl_PDUAddress.signPointCode)) {
+       vl_ASPAddress.signPointCode:= substr(vl_PDUAddress.signPointCode,2,14);
+    }
+    else   {
+      vl_ASPAddress.signPointCode := omit; //ethbaat 2003.11.04
+    }
+
+    if (ispresent (vl_PDUAddress.subsystemNumber )) {  //always suggested ...
+      vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber;
+    }
+    else {
+      vl_ASPAddress.subsystemNumber:=omit;  //ethbaat 2003.11.04
+    }
+
+    if( ispresent( vl_PDUAddress.globalTitle ) ){
+      if  (ischosen (vl_PDUAddress.globalTitle.gti0001))
+      {
+        tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress;
+        tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven;
+        tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0010))
+      {
+        tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType;
+        tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0011))
+      {
+        tmpGT.gti0011.translationType   :=vl_PDUAddress.globalTitle.gti0011.translationType;
+        tmpGT.gti0011.encodingScheme    :=vl_PDUAddress.globalTitle.gti0011.encodingScheme;
+        tmpGT.gti0011.numberingPlan     :=vl_PDUAddress.globalTitle.gti0011.numberingPlan;
+        tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0100))
+      {
+        tmpGT.gti0100.translationType   :=vl_PDUAddress.globalTitle.gti0100.translationType;
+        tmpGT.gti0100.encodingScheme    :=vl_PDUAddress.globalTitle.gti0100.encodingScheme;
+        tmpGT.gti0100.numberingPlan     :=vl_PDUAddress.globalTitle.gti0100.numberingPlan;
+        tmpGT.gti0100.natureOfAddress   :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress
+        //tmpGT.gti0100.reserved:='00'B;
+        tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      }
+    }
+    else
+    {
+      vl_ASPAddress.globalTitle:= omit;
+    };
+
+    return vl_ASPAddress;
+  } //ConvertPDUEncodedAddressToASPAddress_itu
+
+  //******************************************************************
+  // function ConvertPDUEncodedAddressToASPAddress_ansi
+  // converts Encoded PDU Address into sturctured ASP Address
+  // according to ANSI
+  //******************************************************************
+
+  function ConvertPDUEncodedAddressToASPAddress_ansi( in SCCP_param_CPartyAddressEnc pl_PDUAddress)
+    runs on SCCP_CT return SCCP_PAR_Address
+  {
+    var SCCP_PAR_Address  vl_ASPAddress;
+    var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc
+    var SCCP_param_CPartyAddress_ansi vl_PDUAddress;
+
+    //new code detail (ethbaat 2003.11.04:
+    // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu":
+    vl_PDUAddress := dec_PDU_SCCP_Address_ansi( pl_PDUAddress.addr );
+
+    vl_ASPAddress.addressIndicator.pointCodeIndic   :=
+      vl_PDUAddress.addressIndicator.pointCodeIndic;
+
+    vl_ASPAddress.addressIndicator.ssnIndicator     :=
+      vl_PDUAddress.addressIndicator.ssnIndicator;
+
+    vl_ASPAddress.addressIndicator.globalTitleIndic :=
+      vl_PDUAddress.addressIndicator.globalTitleIndic;
+
+    vl_ASPAddress.addressIndicator.routingIndicator :=
+      vl_PDUAddress.addressIndicator.routingIndicator;
+
+    if (ispresent (vl_PDUAddress.signPointCode )) {
+      vl_ASPAddress.signPointCode:=  vl_PDUAddress.signPointCode;
+    }
+    else   {
+     //vl_ASPAddress.signPointCode.pointCode:='0000000000000000'B; //or empty??? ( 16len bitstring
+     vl_ASPAddress.signPointCode:= omit; //ethbaat 2003.11.11
+    }
+
+    if (ispresent (vl_PDUAddress.subsystemNumber)) {  //always suggested ...
+      vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber;
+    }
+    else {
+      vl_ASPAddress.subsystemNumber:=omit;  //ethbaat 2003.11.04
+      //vl_ASPAddress.subsystemNumber:= 0;
+    };
+
+    if( ispresent( vl_PDUAddress.globalTitle ) ){
+      if  (ischosen (vl_PDUAddress.globalTitle.gti0001))
+      {
+        tmpGT.gti0011.translationType   :=vl_PDUAddress.globalTitle.gti0001.translationType;
+        tmpGT.gti0011.encodingScheme    :=vl_PDUAddress.globalTitle.gti0001.encodingScheme;
+        tmpGT.gti0011.numberingPlan     :=vl_PDUAddress.globalTitle.gti0001.numberingPlan;
+        tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      }
+      if  (ischosen (vl_PDUAddress.globalTitle.gti0010))
+      {
+        tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType;
+        tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      };
+    }
+    else
+    {
+      vl_ASPAddress.globalTitle:= omit;
+    };
+
+    return vl_ASPAddress;
+  } //ConvertPDUEncodedAddressToASPAddress_ansi
+
+  //******************************************************************
+  // function ConvertPDUEncodedAddressToASPAddress_ttc
+  // converts Encoded PDU Address into sturctured ASP Address
+  // according to ttc
+  //******************************************************************
+  function ConvertPDUEncodedAddressToASPAddress_ttc( in SCCP_param_CPartyAddressEnc pl_PDUAddress)
+    runs on SCCP_CT return SCCP_PAR_Address
+  {
+    var SCCP_PAR_Address  vl_ASPAddress;
+    var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc
+    var SCCP_param_CPartyAddress_ttc vl_PDUAddress;
+
+    //new code detail (ethbaat 2003.11.04:
+    // decoding from octetstring to structure "SCCP_param_CPartyAddress_itu":
+    vl_PDUAddress := dec_PDU_SCCP_Address_ttc( pl_PDUAddress.addr );
+
+    vl_ASPAddress.addressIndicator.pointCodeIndic   :=
+      vl_PDUAddress.addressIndicator.pointCodeIndic;
+
+    vl_ASPAddress.addressIndicator.ssnIndicator     :=
+      vl_PDUAddress.addressIndicator.ssnIndicator;
+
+    vl_ASPAddress.addressIndicator.globalTitleIndic :=
+      vl_PDUAddress.addressIndicator.globalTitleIndic;
+
+    vl_ASPAddress.addressIndicator.routingIndicator :=
+      vl_PDUAddress.addressIndicator.routingIndicator;
+
+    if (ispresent ( vl_PDUAddress.signPointCode)) {
+       vl_ASPAddress.signPointCode:= vl_PDUAddress.signPointCode; //old:substr(vl_PDUAddress.signPointCode,2,16);
+    }
+    else   {
+      vl_ASPAddress.signPointCode := omit; //ethbaat 2003.11.04
+    }
+
+    if (ispresent (vl_PDUAddress.subsystemNumber )) {  //always suggested ...
+      vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber;
+    }
+    else {
+      vl_ASPAddress.subsystemNumber:=omit;  //ethbaat 2003.11.04
+    }
+
+    if( ispresent( vl_PDUAddress.globalTitle)){
+      if  (ischosen (vl_PDUAddress.globalTitle.gti0001))
+      {
+        tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress;
+        tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven;
+        tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0010))
+      {
+        tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType;
+        tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0011))
+      {
+        tmpGT.gti0011.translationType   :=vl_PDUAddress.globalTitle.gti0011.translationType;
+        tmpGT.gti0011.encodingScheme    :=vl_PDUAddress.globalTitle.gti0011.encodingScheme;
+        tmpGT.gti0011.numberingPlan     :=vl_PDUAddress.globalTitle.gti0011.numberingPlan;
+        tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0100))
+      {
+        tmpGT.gti0100.translationType   :=vl_PDUAddress.globalTitle.gti0100.translationType;
+        tmpGT.gti0100.encodingScheme    :=vl_PDUAddress.globalTitle.gti0100.encodingScheme;
+        tmpGT.gti0100.numberingPlan     :=vl_PDUAddress.globalTitle.gti0100.numberingPlan;
+        tmpGT.gti0100.natureOfAddress   :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress;
+        //tmpGT.gti0100.reserved:='00'B;
+        tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      };
+    }
+    else
+    {
+      vl_ASPAddress.globalTitle:= omit;
+    };
+
+    return vl_ASPAddress;
+  } //ConvertPDUEncodedAddressToASPAddress_ttc
+
+  //******************************************************************
+  // function ConvertPDUEncodedAddressToASPAddress_mpt
+  // converts Encoded PDU Address into sturctured ASP Address
+  // according to mpt
+  //******************************************************************
+  function ConvertPDUEncodedAddressToASPAddress_mpt( in SCCP_param_CPartyAddressEnc pl_PDUAddress)
+    runs on SCCP_CT return SCCP_PAR_Address
+  {
+    var SCCP_PAR_Address  vl_ASPAddress;
+    var SCCP_ASPfield_GlobalTitle tmpGT; // the same for itu, ansi and ttc
+    var SCCP_param_CPartyAddress_mpt vl_PDUAddress;
+
+    vl_PDUAddress := dec_PDU_SCCP_Address_mpt( pl_PDUAddress.addr );
+
+    vl_ASPAddress.addressIndicator.pointCodeIndic   :=
+      vl_PDUAddress.addressIndicator.pointCodeIndic;
+
+    vl_ASPAddress.addressIndicator.ssnIndicator     :=
+      vl_PDUAddress.addressIndicator.ssnIndicator;
+
+    vl_ASPAddress.addressIndicator.globalTitleIndic :=
+      vl_PDUAddress.addressIndicator.globalTitleIndic;
+
+    vl_ASPAddress.addressIndicator.routingIndicator :=
+      vl_PDUAddress.addressIndicator.routingIndicator;
+
+    if (ispresent ( vl_PDUAddress.signPointCode)) {
+       vl_ASPAddress.signPointCode:= vl_PDUAddress.signPointCode;
+    }
+    else   {
+      vl_ASPAddress.signPointCode := omit;
+    }
+
+    if (ispresent (vl_PDUAddress.subsystemNumber )) {  //always suggested ...
+      vl_ASPAddress.subsystemNumber:= vl_PDUAddress.subsystemNumber;
+    }
+    else {
+      vl_ASPAddress.subsystemNumber:=omit;
+    }
+
+    if( ispresent( vl_PDUAddress.globalTitle)){
+      if  (ischosen (vl_PDUAddress.globalTitle.gti0001))
+      {
+        tmpGT.gti0001.natureOfAddress:=vl_PDUAddress.globalTitle.gti0001.natureOfAddress;
+        tmpGT.gti0001.oddeven:=vl_PDUAddress.globalTitle.gti0001.oddeven;
+        tmpGT.gti0001.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0001.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0010))
+      {
+        tmpGT.gti0010.translationType:=vl_PDUAddress.globalTitle.gti0010.translationType;
+        tmpGT.gti0010.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0010.globalTitleAddress;
+        vl_ASPAddress.globalTitle:=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0011))
+      {
+        tmpGT.gti0011.translationType   :=vl_PDUAddress.globalTitle.gti0011.translationType;
+        tmpGT.gti0011.encodingScheme    :=vl_PDUAddress.globalTitle.gti0011.encodingScheme;
+        tmpGT.gti0011.numberingPlan     :=vl_PDUAddress.globalTitle.gti0011.numberingPlan;
+        tmpGT.gti0011.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0011.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      }
+      else if  (ischosen (vl_PDUAddress.globalTitle.gti0100))
+      {
+        tmpGT.gti0100.translationType   :=vl_PDUAddress.globalTitle.gti0100.translationType;
+        tmpGT.gti0100.encodingScheme    :=vl_PDUAddress.globalTitle.gti0100.encodingScheme;
+        tmpGT.gti0100.numberingPlan     :=vl_PDUAddress.globalTitle.gti0100.numberingPlan;
+        tmpGT.gti0100.natureOfAddress   :=vl_PDUAddress.globalTitle.gti0100.natureOfAddress;
+        //tmpGT.gti0100.reserved:='00'B;
+        tmpGT.gti0100.globalTitleAddress:=vl_PDUAddress.globalTitle.gti0100.globalTitleAddress;
+        vl_ASPAddress.globalTitle     :=tmpGT;
+      };
+    }
+    else
+    {
+      vl_ASPAddress.globalTitle:= omit;
+    };
+
+    return vl_ASPAddress;
+  } //ConvertPDUEncodedAddressToASPAddress_mpt
+
+  //==================================================================
+  // MAIN CONVERSION FUNCTIONS:
+  //==================================================================
+
+  //******************************************************************
+  //  function ConvertASPAddressToEncodedAddress
+  //  converts ASP address structure to PDU address structure
+  //  THIS IS THE MAIN ENCODE FUNCTION (coordinator)
+  //******************************************************************
+
+  function ConvertASPAddressToEncodedAddress( in SCCP_PAR_Address pl_ASPAddress)
+    runs on SCCP_CT return SCCP_param_CPartyAddressEnc
+  {
+      var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
+      if( ( v_SCCPServiceType == mtp3_itu) or
+          ( v_SCCPServiceType == mtp3b_itu))
+      {
+         return  ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress );
+      }
+      else if(  (v_SCCPServiceType == mtp3_ansi) or
+                (v_SCCPServiceType == mtp3b_ansi))
+      {
+        return ConvertASPAddressToEncodedAddress_ansi( pl_ASPAddress );
+      }
+      else if((v_SCCPServiceType == mtp3_ttc) or
+              (v_SCCPServiceType == mtp3b_ttc))
+      {
+        if( (v_SIO == '83'O) or (v_SIO == '43'O) or (v_SIO == 'C3'O) ) //ttc national
+        {
+          return ConvertASPAddressToEncodedAddress_ttc( pl_ASPAddress );
+        }
+        else
+        { //international == itu
+          return  ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress );
+        }
+      }//if1
+      else if((v_SCCPServiceType == mtp3_mpt))
+      {
+        if( v_NI == 2 ) //mpt national
+        {
+          return ConvertASPAddressToEncodedAddress_mpt( pl_ASPAddress );
+        }
+        else
+        { //international == itu
+          return  ConvertASPAddressToEncodedAddress_itu( pl_ASPAddress );
+        }
+      }//if1
+      else {
+        log("Error in ConvertASPAddressToEncodedAddress: Unknown SCCPServiceType");
+        stop;
+      }
+      return vl_PDUAddressEncoded; // error!!!
+  }
+
+  //******************************************************************
+  // function ConvertPDUEncodedAddressToASPAddress
+  // converts Encoded PDU Address into sturctured ASP Address
+  // THIS IS THE MAIN DECODE FUNCTION (coordinator)
+  //******************************************************************
+
+
+  function ConvertPDUEncodedAddressToASPAddress( in SCCP_param_CPartyAddressEnc pl_PDUAddress)
+  runs on SCCP_CT return SCCP_PAR_Address
+  {
+    var SCCP_PAR_Address vl_dummyretval;
+
+    if( (v_SCCPServiceType == mtp3_itu) or
+        (v_SCCPServiceType == mtp3b_itu) )
+    {
+      return  ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress );
+    }
+    else if( (v_SCCPServiceType == mtp3_ansi) or
+             (v_SCCPServiceType == mtp3b_ansi) )
+    {
+      return  ConvertPDUEncodedAddressToASPAddress_ansi( pl_PDUAddress );
+    }
+    else if( (v_SCCPServiceType == mtp3_ttc) or
+             (v_SCCPServiceType == mtp3b_ttc)){
+      if( (v_SIO == '83'O) or (v_SIO == '43'O) or (v_SIO == 'C3'O) )
+      {
+        //ttc national
+        return ConvertPDUEncodedAddressToASPAddress_ttc( pl_PDUAddress );
+      }
+      else {
+        return  ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress );
+      }
+    }
+    else if((v_SCCPServiceType == mtp3_mpt))
+    {
+      if( v_NI == 2 ) //mpt national
+      {
+        return ConvertPDUEncodedAddressToASPAddress_mpt( pl_PDUAddress );
+      }
+      else
+      { //international == itu
+        return  ConvertPDUEncodedAddressToASPAddress_itu( pl_PDUAddress );
+      }
+    }
+    else {
+      log("Error in function ConvertPDUEncodedAddressToASPAddress, Unknown SCCPSCCPType");
+      stop;
+    }
+    return vl_dummyretval;
+  }//ConvertPDUEncodedAddressToASPAddress
+/*
+//*************************************************************************
+//*************************************************************************
+//EncDec ComponentBehaviour
+//*************************************************************************
+//*************************************************************************
+
+  // TO DO:Desk check it! As I see, it's OK, but the meaning has been changed\
+  // because structure of PDU_SCCP has been changed
+
+  //*************************************************************************
+  function ScanRAWPorts()  runs on SCCP_EncDec_CT
+  //*************************************************************************
+  {
+    //local declarations
+  var  ASP_MTP3_TRANSFERind vl_ASP_MTP3_TRANSFERind;
+  var  ASP_MTP3_TRANSFERreq vl_ASP_MTP3_TRANSFERreq;
+  var  ASP_MTP3_TRANSFERreq_sccp vl_ASP_MTP3_TRANSFERreq_sccp
+
+  var  PDU_SCCP   vl_PDU_SCCP;
+  var  integer    vl_msg_type;
+
+  while (true)
+  {
+    alt
+    {
+
+    //********************************************************************
+    //message received from SCCP , containing a PDU to be encoded
+    //********************************************************************
+
+      []MTP3_SCCP_SP_PORT.receive( tr_ASP_MTP3_TRANSFERreq_sccp) -> value vl_ASP_MTP3_TRANSFERreq_sccp
+        {
+          var bitstring vl_sio_bit := oct2bit(vl_ASP_MTP3_TRANSFERreq_sccp.sio);
+          var MTP3_Field_sio vl_sio_struct;
+          vl_sio_struct.ni := substr(vl_sio_bit,0,2);
+          vl_sio_struct.prio := substr(vl_sio_bit,2,2);
+          vl_sio_struct.si := substr(vl_sio_bit,4,4);
+
+          MTP3_PORT.send(t_ASP_MTP3_TRANSFERreq(
+            vl_sio_struct,
+            vl_ASP_MTP3_TRANSFERreq_sccp.opc,
+            vl_ASP_MTP3_TRANSFERreq_sccp.dpc,
+            vl_ASP_MTP3_TRANSFERreq_sccp.sls,
+            enc_PDU_SCCP(vl_ASP_MTP3_TRANSFERreq_sccp.data)
+          ));
+        }
+
+      //********************************************************************
+      //message received from MTP3 , containing an octetstring to be decoded:
+      //********************************************************************
+
+      []MTP3_PORT.receive(tr_ASP_MTP3_TRANSFERind) -> value  vl_ASP_MTP3_TRANSFERind
+        {//startStatementBlock
+          if (vl_ASP_MTP3_TRANSFERind.sio.si != '0011'B)
+          {
+            log("The received message is not SCCP. Ignored.");
+            repeat;
+          }
+          vl_msg_type:= oct2int( vl_ASP_MTP3_TRANSFERind.data[0] );
+
+          select(vl_msg_type)
+          {
+            case (xudt)  // '11'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+              MTP3_SCCP_SP_PORT.send( vl_PDU_SCCP.extudata );
+            }
+            case (udt) //'09'O
+            {
+              //decode octetstring
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Unitdata(
+                    vl_PDU_SCCP.unitdata.protClass,
+                    vl_PDU_SCCP.unitdata.calledPAddress,
+                    vl_PDU_SCCP.unitdata.callingPAddress,
+                    vl_PDU_SCCP.unitdata.data));
+
+            }//endif
+            case (dt1)//'06'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_DataForm1(
+                  vl_PDU_SCCP.dataform1.destLocRef,
+                  vl_PDU_SCCP.dataform1.segmentingReassembl,
+                  vl_PDU_SCCP.dataform1.data
+                  ));
+            }
+            case (cr) //'01'O
+            {//startif
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              if (ispresent(vl_PDU_SCCP.connrequest.eop))
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRequest(
+                      vl_PDU_SCCP.connrequest.sourceLocRef,
+                      vl_PDU_SCCP.connrequest.protClass,
+                      vl_PDU_SCCP.connrequest.calledPAddress,
+                      vl_PDU_SCCP.connrequest.optionalPart.credit,
+                      vl_PDU_SCCP.connrequest.optionalPart.callingPAddress,
+                      vl_PDU_SCCP.connrequest.optionalPart.data,
+                      vl_PDU_SCCP.connrequest.optionalPart.hopCounter,
+                      vl_PDU_SCCP.connrequest.optionalPart.importance,
+                      vl_PDU_SCCP.connrequest.eop
+                ));
+              }
+              else
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRequest(
+                      vl_PDU_SCCP.connrequest.sourceLocRef,
+                      vl_PDU_SCCP.connrequest.protClass,
+                      vl_PDU_SCCP.connrequest.calledPAddress,
+                      vl_PDU_SCCP.connrequest.optionalPart.credit,
+                      vl_PDU_SCCP.connrequest.optionalPart.callingPAddress,
+                      vl_PDU_SCCP.connrequest.optionalPart.data,
+                      vl_PDU_SCCP.connrequest.optionalPart.hopCounter,
+                      vl_PDU_SCCP.connrequest.optionalPart.importance,
+                      omit
+                ));
+              }
+
+            }
+            case (cc) //'02'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              if (ispresent(vl_PDU_SCCP.connconfirm.eop))
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionConfirm(
+                      vl_PDU_SCCP.connconfirm.destLocRef,
+                      vl_PDU_SCCP.connconfirm.sourceLocRef,
+                      vl_PDU_SCCP.connconfirm.protClass,
+                      vl_PDU_SCCP.connconfirm.optionalPart.credit,
+                      vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress,
+                      vl_PDU_SCCP.connconfirm.optionalPart.data,
+                      vl_PDU_SCCP.connconfirm.optionalPart.importance,
+                      vl_PDU_SCCP.connconfirm.eop                  ));
+              }
+              else
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionConfirm(
+                      vl_PDU_SCCP.connconfirm.destLocRef,
+                      vl_PDU_SCCP.connconfirm.sourceLocRef,
+                      vl_PDU_SCCP.connconfirm.protClass,
+                      vl_PDU_SCCP.connconfirm.optionalPart.credit,
+                      vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress,
+                      vl_PDU_SCCP.connconfirm.optionalPart.data,
+                      vl_PDU_SCCP.connconfirm.optionalPart.importance,
+                      omit));
+              }
+
+            }
+            case (udts) //'0A'O
+          {//startif
+            vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+            MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_UnitdataService(
+                  vl_PDU_SCCP.udataserv.returnCause,
+                  vl_PDU_SCCP.udataserv.calledPAddress,
+                  vl_PDU_SCCP.udataserv.callingPAddress,
+                  vl_PDU_SCCP.udataserv.data));
+
+          }//endif
+            case (rlsd) //'04'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              if (ispresent(vl_PDU_SCCP.released.eop))
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Released(
+                      vl_PDU_SCCP.released.destLocRef,
+                      vl_PDU_SCCP.released.sourceLocRef,
+                      vl_PDU_SCCP.released.releaseCause,
+                      vl_PDU_SCCP.released.optionalPart.data,
+                      vl_PDU_SCCP.released.optionalPart.importance,
+                      vl_PDU_SCCP.released.eop
+                      ));
+              }
+              else
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_Released(
+                      vl_PDU_SCCP.released.destLocRef,
+                      vl_PDU_SCCP.released.sourceLocRef,
+                      vl_PDU_SCCP.released.releaseCause,
+                      vl_PDU_SCCP.released.optionalPart.data,
+                      vl_PDU_SCCP.released.optionalPart.importance,
+                      omit
+                      ));
+              }
+
+            }
+            case (err)//'0F'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ProtDataUnitError(
+                    vl_PDU_SCCP.pduerror.destLocRef,
+                    vl_PDU_SCCP.pduerror.errorCause
+                     ));
+            }
+            case (rlc)//'05'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ReleaseComplete(
+                    vl_PDU_SCCP.relcomp.destLocRef,
+                    vl_PDU_SCCP.relcomp.sourceLocRef
+                    ));
+            }
+            case (it)//'10'O
+            {
+                vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_InactivityTest(
+                    vl_PDU_SCCP.inacttest.destLocRef,
+                    vl_PDU_SCCP.inacttest.sourceLocRef,
+                    vl_PDU_SCCP.inacttest.protClass,
+                    vl_PDU_SCCP.inacttest.sequencingSegmenting,
+                    vl_PDU_SCCP.inacttest.credit
+                    ));
+            }
+            case (rsr)//'0D'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ResetRequest(
+                    vl_PDU_SCCP.resetreq.destLocRef,
+                    vl_PDU_SCCP.resetreq.sourceLocRef,
+                    vl_PDU_SCCP.resetreq.resetCause
+                    ));
+            }
+            case (rsc)//'0E'O
+            {
+
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ResetConfirm(
+                    vl_PDU_SCCP.resconf.destLocRef,
+                    vl_PDU_SCCP.resconf.sourceLocRef
+                    ));
+            }//endif
+            case (cref)//'03'O
+            {
+              vl_PDU_SCCP:=dec_PDU_SCCP(vl_ASP_MTP3_TRANSFERind.data);
+
+              if (ispresent(vl_PDU_SCCP.connrefused.eop))
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRefused(
+                    vl_PDU_SCCP.connrefused.destLocRef,
+                    vl_PDU_SCCP.connrefused.refusalCause,
+                    vl_PDU_SCCP.connrefused.optionalPart.calledPAddress,
+                    vl_PDU_SCCP.connrefused.optionalPart.data,
+                    vl_PDU_SCCP.connrefused.optionalPart.importance,
+                    vl_PDU_SCCP.connrefused.eop
+                    ));
+              }
+              else
+              {
+                MTP3_SCCP_SP_PORT.send( t_PDU_SCCP_ConnectionRefused(
+                    vl_PDU_SCCP.connrefused.destLocRef,
+                    vl_PDU_SCCP.connrefused.refusalCause,
+                    vl_PDU_SCCP.connrefused.optionalPart.calledPAddress,
+                    vl_PDU_SCCP.connrefused.optionalPart.data,
+                    vl_PDU_SCCP.connrefused.optionalPart.importance,
+                    omit
+                    ));
+              }
+            }
+            case (xudts,ludt,ludts)
+            {
+              log ("Unsupported connectionless message ((-XUDT or))  XUDTS or LUDT or LUDTS - received and discarded");
+            }
+            case (dt2,ak,ed,ea )
+            {
+              log ("Unsupported connection-oriented  message -DT2 or AK or ED or EA - received and discarded");
+            }
+            case else { log ("Unrecognized message received and discarded"); }
+          }
+        }//endStatementBlock
+
+      }//endalt
+
+    }//endwhile
+
+  }//endfunction
+*/
+
+//******************************************************************
+//
+//    working functions for ScanEvents
+//
+//******************************************************************
+
+//******************************************************************
+//    Part 1 :  Receiving msg on port "MTP3_SCCP_PORT"
+//******************************************************************
+
+
+  //******************************************************************
+  //  processing_PDU_SCCP_Unitdata
+  //******************************************************************
+  function processing_PDU_SCCP_Unitdata( in PDU_SCCP_Unitdata pl_PDU_SCCP_Unitdata)
+  runs on SCCP_CT
+  {
+    //var   PDU_SCCP_Unitdata vl_PDU_SCCP_Unitdata;
+    var   PDU_SCCP          vl_PDU_SCCP;
+    var   ASP_SCCP_N_UNITDATA_ind    vl_N_UNITDATA_ind;
+
+    vl_PDU_SCCP.unitdata:= pl_PDU_SCCP_Unitdata;
+
+    // it should be decoded to structure to read if it is a mgmt message or not
+    vl_N_UNITDATA_ind.calledAddress :=
+      ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_Unitdata.calledPAddress);
+
+    if ( ispresent(vl_N_UNITDATA_ind.calledAddress.subsystemNumber)  and
+      vl_N_UNITDATA_ind.calledAddress.subsystemNumber != cg_SSN_sCCPmanagement)
+    //SCCP mgmt message
+    {//startif1
+
+      //no SCCP or node congestion assumed
+      //'route on SSN' assumed
+
+      //subsystems are assumed equipped and available
+      //as the message is received from MTP3 , DPC is assumed to be matching the PC of the own node without
+      // any further checks
+
+      //assemble ASP_SCCP_N_
+      vl_N_UNITDATA_ind.callingAddress:=
+        ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_Unitdata.callingPAddress);
+
+      // Wrong old:
+      //vl_N_UNITDATA_ind.sequenceControl:=
+      //  '0000000'B&pl_PDU_SCCP_Unitdata.protClass.class[0]; // Q.713/3.6  0.bit=1=>seq msb???
+
+      vl_N_UNITDATA_ind.sequenceControl:=
+        '0000000'B&pl_PDU_SCCP_Unitdata.protClass.class[3];
+
+      if( pl_PDU_SCCP_Unitdata.protClass.messageHandling == '1000'B )
+      { vl_N_UNITDATA_ind.returnOption   := '00000001'B; }
+      else
+      { vl_N_UNITDATA_ind.returnOption   := '00000000'B; }
+
+      //connectionless-class 0 or 1
+      //protocol class 0- SCCP_sequence_ctrl_off
+      //protocol class 1- SCCP_sequence_ctrl_on
+      // wrong: vl_N_UNITDATA_ind.returnOption       :='0000000'B&pl_PDU_SCCP_Unitdata.protClass.messageHandling[3];
+
+      //only two values( '0000'B -no special options
+      //and   '1000'B -return message on error) assumed
+      //octetstring                          vs.   length+octetstring
+      vl_N_UNITDATA_ind.userData         :=pl_PDU_SCCP_Unitdata.data.data;
+      vl_N_UNITDATA_ind.importance := omit;
+      SCCP_SP_PORT.send( vl_N_UNITDATA_ind );
+
+
+    }//endif1
+    else { //startelse1-SCCPmanagement message
+
+      log ("SCCP management message received");
+      var octetstring  vl_data;
+      vl_data:=pl_PDU_SCCP_Unitdata.data.data;
+
+      vl_PDU_SCCP.unitdata.messageType:=udt ;
+      vl_PDU_SCCP.unitdata.calledPAddress:=pl_PDU_SCCP_Unitdata.callingPAddress;
+      vl_PDU_SCCP.unitdata.callingPAddress:=pl_PDU_SCCP_Unitdata.calledPAddress;
+
+      if ((vl_data[0]=='03'O) and                       //SST message
+          ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN))) //right SSN
+      {//startif2
+
+        //send Unitdata with SSA
+        vl_PDU_SCCP.unitdata.data.data[0]:='01'O;//Change to SSA
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata_SSA
+
+      }//endif2
+      else if ((vl_data[0]=='02'O) and                       //SSP message
+               ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN))) //right SSN
+      {//startif2
+
+        //send Unitdata with SST
+        vl_PDU_SCCP.unitdata.data.data[0]:='03'O;//Change to SST
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata_SST
+
+      }//endif2
+      else if ((vl_data[0]=='01'O) and                        //SSA message
+               ((v_SSN==0) or (oct2int(vl_data[1])==v_SSN)))  //right SSN
+      {//startif2
+
+        //send Unitdata with SS
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP ));//send Unitdata_SSA
+
+      }//endif2
+      else
+      {
+        log("Unsupported (or containing inconsistent SSN)SCCP management message  received and discarded")
+      }
+    }//endelse1
+    return;
+  } // processing_PDU_SCCP_Unitdata()
+
+  //******************************************************************
+  //  processing_PDU_SCCP_UnitdataService
+  //******************************************************************
+  function processing_PDU_SCCP_UnitdataService( in PDU_SCCP_UnitdataService pl_PDU_SCCP_UnitdataService )
+  runs on SCCP_CT
+  {
+
+    var ASP_SCCP_N_NOTICE_ind  vl_N_NOTICE_ind;
+
+    //no SCCP or node congestion assumed
+    //'route on SSN' assumed
+
+    //subsystems are assumed equipped and available
+    //as the message is received from MTP3 , DPC is assumed to be the PC of the own node without
+    // any further checks
+
+    //assemble ASP_SCCP_N_
+
+    vl_N_NOTICE_ind.calledAddress :=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_UnitdataService.calledPAddress );
+    vl_N_NOTICE_ind.callingAddress:=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_UnitdataService.callingPAddress);
+    //one to one mapping between reasonForReturn and returnCause -Q713 A5
+    vl_N_NOTICE_ind.reasonForReturn  := pl_PDU_SCCP_UnitdataService.returnCause   ;
+    vl_N_NOTICE_ind.userData         := pl_PDU_SCCP_UnitdataService.data.data   ;
+
+    SCCP_SP_PORT.send( t_ASP_N_NOTICE_ind(
+      vl_N_NOTICE_ind.calledAddress ,
+      vl_N_NOTICE_ind.callingAddress,
+      vl_N_NOTICE_ind.reasonForReturn,
+      vl_N_NOTICE_ind.userData ,
+      omit));
+
+  }// processing_PDU_SCCP_UnitdataService
+
+
+  //******************************************************************
+  //   processing_PDU_SCCP_ConnectionRequest
+  //******************************************************************
+  function processing_PDU_SCCP_ConnectionRequest( in PDU_SCCP_ConnectionRequest pl_PDU_SCCP_ConnectionRequest)
+  runs on SCCP_CT
+  {
+    //no SCCP or node congestion assumed
+    //we assume that routing is done on SSN; we are in the dest.node
+    //SS is equipped and available
+
+    //check if connection already established
+    //local reference not assigned yet; search has to be done based on remote reference,
+    // to prevent erroneous situations
+    //for all other MTP3_ASPs, search is done based on destLocRef, containing the local
+    //reference sent to the neighbouring node
+
+    if (ConnectionAlreadyEstablished_remote(pl_PDU_SCCP_ConnectionRequest.sourceLocRef))
+    {//startif3
+      v_session :=Retrieve_session_remote(pl_PDU_SCCP_ConnectionRequest.sourceLocRef);
+      //Action Table follows
+
+      if (ConnectionTable[v_session].state==idle)
+      { log("CR received with reference for an already established conn. in state:idle");}//no source ref known
+      else if (ConnectionTable[v_session].state==active)
+      { log("CR received with reference for an already established conn. in state:active");}
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      { log("CR received with reference for an already established conn. in state:reset_bothway");}
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      { log("CR received with reference for an already established conn. in state:connection_pending_IC");}
+      //discard message, return
+      else if (ConnectionTable[v_session].state==disconnect_pending)
+      { log("CR received with reference for an already established conn. in state:disconnect_pending");}//discard message, return
+      else if (ConnectionTable[v_session].state==reset_IC) {//startif4
+        //discard received message
+        f_StartTimer(internal_reset,v_session,0.0);//the dummy timer times out immediately
+        //state changed to active
+        ConnectionTable[v_session].state:=active;
+
+      }//endif4
+      else if (ConnectionTable[v_session].state==wait_conn_confirm)
+      {//startif4
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //release resources
+        ReleaseResources(v_session);
+      }//endif4
+    }//endif3
+    else  {//startelse
+
+      //*************************************************************************
+      //connection not yet established  - new v_session
+      //check if resources available
+      v_session:=CheckIdleIndividuals()
+
+      //idle individual found  , resources available, 0<=v_session<=15
+      if ( v_session!=-1 )
+      {//startif3
+        //
+        ConnectionTable[v_session].localReference := GenerateLocalReference();
+        ConnectionTable[v_session].remoteReference:= pl_PDU_SCCP_ConnectionRequest.sourceLocRef;
+        //local reference assigned here!!(see Fig. C.3/Q714)
+
+        ConnectionTable[v_session].connectionId   := GenerateConnectionId();
+
+        //once local reference is assigned , a session is considered established
+        //determine protocol class
+        //assemble ASP_SCCP_N_
+        //start guard timer T_guard ;if no answer to ASP_SCCP_N_CONNECT_ind is received, timer will release
+
+        var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind;
+        f_StartTimer(t_guard,v_session);
+
+        vl_N_CONNECT_ind.calledAddress:=ConvertPDUEncodedAddressToASPAddress(pl_PDU_SCCP_ConnectionRequest.calledPAddress);
+
+        if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart))
+        {
+          if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress))
+          {//startif4
+
+            //temporary variable to avoid type conversion problems
+            var SCCP_param_CPartyAddressEnc  vl_PDUAddress;
+            vl_PDUAddress.addr             := pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress.addr;
+            vl_PDUAddress.paramLength      := pl_PDU_SCCP_ConnectionRequest.optionalPart.callingPAddress.paramLength;
+            vl_N_CONNECT_ind.callingAddress:= ConvertPDUEncodedAddressToASPAddress(vl_PDUAddress);
+
+          }//endif4
+          else {vl_N_CONNECT_ind.callingAddress:=omit}
+
+          if (ispresent(pl_PDU_SCCP_ConnectionRequest.optionalPart.data))
+          {//startif4
+            //temporary variable to avoid type conversion problems
+            var SCCP_param_Data_opt  vl_SCCP_param_Data_opt;
+
+            vl_SCCP_param_Data_opt:=pl_PDU_SCCP_ConnectionRequest.optionalPart.data;
+            vl_N_CONNECT_ind.userData:=vl_SCCP_param_Data_opt.data;
+
+          }//endif4
+          else {vl_N_CONNECT_ind.userData:=omit}
+        }
+        else
+        {
+          vl_N_CONNECT_ind.callingAddress:=omit;
+          vl_N_CONNECT_ind.userData:=omit;
+        }
+
+        vl_N_CONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_CONNECT_ind(
+          vl_N_CONNECT_ind.calledAddress,
+          vl_N_CONNECT_ind.callingAddress,
+          omit,
+          vl_N_CONNECT_ind.userData,  //ethcky
+          vl_N_CONNECT_ind.connectionId,
+          omit));//send ASP_SCCP_N_CONNECT_ind
+
+        //restart send inactivity timer (baat)
+        f_StopTimer(ias,v_session);//to avoid warnings
+        f_StartTimer(ias,v_session);
+        ConnectionTable[v_session].state:=connection_pending_IC;
+
+      }//endif3
+
+      //no idle individual found , no resources available , v_session=-1
+      if (v_session==-1)
+      {//startif3
+
+        var  PDU_SCCP vl_PDU_SCCP;
+        //assemble and route MTP3 ASP
+        vl_PDU_SCCP.connrefused.messageType:=cref;
+        vl_PDU_SCCP.connrefused.destLocRef:=pl_PDU_SCCP_ConnectionRequest.sourceLocRef;
+        vl_PDU_SCCP.connrefused.refusalCause:=1;//End user congestion
+        vl_PDU_SCCP.connrefused.pointer1:=0;// No options
+        vl_PDU_SCCP.connrefused.optionalPart:=omit;
+        vl_PDU_SCCP.connrefused.eop:=omit;
+        MTP3_SCCP_PORT.send ( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Connection refused, no idle individuals
+        //return to idle
+      }//endif3
+    }//endelse
+
+  }//processing_PDU_SCCP_ConnectionRequest
+
+//******************************************************************
+//  processing_PDU_SCCP_ConnectionConfirm
+//******************************************************************
+  function processing_PDU_SCCP_ConnectionConfirm( in PDU_SCCP_ConnectionConfirm pl_PDU_SCCP_ConnectionConfirm)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP        vl_PDU_SCCP;
+    var ASP_SCCP_N_CONNECT_cfm   vl_N_CONNECT_cfm;
+
+    log(pl_PDU_SCCP_ConnectionConfirm);
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ConnectionConfirm.destLocRef))
+    {//startif2
+      v_session :=Retrieve_session(pl_PDU_SCCP_ConnectionConfirm.destLocRef);
+      //Action Table follows
+      if (ConnectionTable[v_session].state==idle)
+      {
+        //assemble and route MTP3_ASP
+
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+        //then return to idle
+      }
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      { log("CC received in state:connection_pending_IC"); }//discard message, return
+      else if (ConnectionTable[v_session].state==disconnect_pending)
+      { log("CC received in state:disconnect_pending"); }//discard message, return
+      else if (ConnectionTable[v_session].state==active)
+      { log("CC received in state:active"); }//do nothing, return
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      { log("CC received in state:reset_bothway"); }//
+      else if (ConnectionTable[v_session].state==connection_pending_OG)
+      {//startif3
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //start inactivity timers
+        f_StartTimer(ias,v_session);
+        f_StartTimer(iar,v_session);
+        //assign protocol class:=2, associate remote reference
+        ConnectionTable[v_session].remoteReference:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef;
+        //assemble ASP_SCCP_N_
+        vl_N_CONNECT_cfm.connectionId:=ConnectionTable[v_session].connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_CONNECT_cfm(
+            omit,
+            omit,
+            omit,
+            vl_N_CONNECT_cfm.connectionId,
+            omit
+            ));//send ASP_SCCP_N_CONNECT_confirm
+
+        ConnectionTable[v_session].state:=active;
+      }//endif3
+      else if (ConnectionTable[v_session].state==wait_conn_confirm)//connection is confirmed ,
+        // but it has meanwhile been disconnected by the user
+      {//startif3
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //associate remote reference to connection
+        ConnectionTable[v_session].remoteReference:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef;
+        //assemble and route MTP3_ASP
+        vl_PDU_SCCP.released.messageType:=rlsd;
+        vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference;
+        vl_PDU_SCCP.released.releaseCause:=cg_DISC_normal;
+        vl_PDU_SCCP.released.pointer1:=0;//No options
+        vl_PDU_SCCP.released.optionalPart:=omit;
+        vl_PDU_SCCP.released.eop:=omit;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+        //start release timer
+        f_StartTimer(rel,v_session);
+        ConnectionTable[v_session].state:=disconnect_pending;
+      }//endif3
+      else if (ConnectionTable[v_session].state==reset_IC)
+      {//startif3
+        //discard received message
+        f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+        //state changed to active
+        ConnectionTable[v_session].state:=active;
+
+      }//endif3
+      else { log("CC received in an unexpected state");  }
+    }//endif2
+    else {//startelse -Connection confirm  received with destLocRef  not in ConnectionTable
+      //send ERR
+
+      vl_PDU_SCCP.pduerror.messageType:=err;
+      vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ConnectionConfirm.sourceLocRef;
+      vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+    }//endelse
+
+  }//processing_PDU_SCCP_ConnectionConfirm
+
+  //******************************************************************
+  //  processing_PDU_SCCP_Released
+  //******************************************************************
+  function processing_PDU_SCCP_Released( in PDU_SCCP_Released pl_PDU_SCCP_Released)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    //Store data parameter
+    var template SCCP_PAR_UserData tl_data := omit;
+    if (ispresent(pl_PDU_SCCP_Released.optionalPart))
+    {
+      if (ispresent(pl_PDU_SCCP_Released.optionalPart.data))
+      {
+         tl_data := pl_PDU_SCCP_Released.optionalPart.data.data;
+      }
+    }
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_Released.destLocRef))
+    {//startif1
+      v_session :=Retrieve_session(pl_PDU_SCCP_Released.destLocRef);
+      //check if remote reference is correct -Table B.2 /Q.714
+      if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_Released.sourceLocRef)
+      {//startif2
+        //Action Table follows
+        if (ConnectionTable[v_session].state==idle)//C.3- 1/6  ????nem valoszinu hogy ez eloallhat
+        {//startif3
+
+          //assemble and route MTP3_ASP
+          vl_PDU_SCCP.relcomp.messageType:=rlc;
+          vl_PDU_SCCP.relcomp.destLocRef:=ConnectionTable[v_session].remoteReference;
+          vl_PDU_SCCP.relcomp.sourceLocRef:=ConnectionTable[v_session].localReference;
+
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete
+            //then return to idle
+        }//endif3
+        else if (ConnectionTable[v_session].state==connection_pending_IC)
+        { log("RLSD received in state:connection_pending_IC");}//discard message, return
+        else if (ConnectionTable[v_session].state==disconnect_pending)
+        { log("RLSD received in state:disconnect_pending");}//discard message, return
+        else if (ConnectionTable[v_session].state==active)
+        {//startif3
+          //assemble ASP_SCCP_N_
+          vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.reason:=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            tl_data,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //assemble and route MTP3_ASP
+
+          vl_PDU_SCCP.relcomp.messageType :=rlc;
+          vl_PDU_SCCP.relcomp.destLocRef  :=pl_PDU_SCCP_Released.sourceLocRef;
+          vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef;
+
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Release complete
+
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==connection_pending_OG)
+        {//startif3
+          //assemble and route MTP3_ASP
+          vl_PDU_SCCP.relcomp.messageType :=rlc;
+          vl_PDU_SCCP.relcomp.destLocRef  :=pl_PDU_SCCP_Released.sourceLocRef;
+          vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef;
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete
+
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //assemble ASP_SCCP_N_
+
+          vl_N_DISCONNECT_ind.originator  :=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.reason      :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            tl_data,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+           //release resources
+           ReleaseResources(v_session);
+
+        }//endif3
+        else if (ConnectionTable[v_session].state==wait_conn_confirm)
+        {//startif3
+          //assemble and route MTP3_ASP
+          vl_PDU_SCCP.relcomp.messageType  :=rlc;
+          vl_PDU_SCCP.relcomp.destLocRef   :=pl_PDU_SCCP_Released.sourceLocRef;
+          vl_PDU_SCCP.relcomp.sourceLocRef :=pl_PDU_SCCP_Released.destLocRef;
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==reset_IC)
+        {//startif3
+          //assemble ASP_SCCP_N_
+          vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.reason  :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            tl_data,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+
+          //release resources, stop inactivity timers, change state to idle
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==reset_bothway)
+        {//startif3
+          //assemble ASP_SCCP_N_
+
+          vl_N_DISCONNECT_ind.originator:=cg_Mapping_RelCause_Orig[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.reason :=cg_Mapping_RelCause_Reason[pl_PDU_SCCP_Released.releaseCause];
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            tl_data,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+
+          //release resources, stop inactivity timers, change state to idle
+          ReleaseResources(v_session);
+
+        }//endif3
+        else { log("RLSD received in an unexpected state");  }
+      }//endif2
+      else {//remote reference inconsistent, error action follows
+
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_Released.sourceLocRef;
+        vl_PDU_SCCP.pduerror.errorCause :=cg_Err_inconsistentSourceLRN;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+      }//endelse
+    }//endif1
+    else   {//Released(Y,X) received with destLocRef  not in ConnectionTable
+    //send RLC(X,Y)
+
+      vl_PDU_SCCP.relcomp.messageType :=rlc;
+      vl_PDU_SCCP.relcomp.destLocRef  :=pl_PDU_SCCP_Released.sourceLocRef;
+      vl_PDU_SCCP.relcomp.sourceLocRef:=pl_PDU_SCCP_Released.destLocRef;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Release complete
+
+    }//endelse
+  }//processing_PDU_SCCP_Released
+
+  //******************************************************************
+  //  processing_PDU_SCCP_ProtDataUnitError
+  //******************************************************************
+  function processing_PDU_SCCP_ProtDataUnitError( in PDU_SCCP_ProtDataUnitError pl_PDU_SCCP_ProtDataUnitError)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ProtDataUnitError.destLocRef))
+    {//startif2
+      v_session :=Retrieve_session(pl_PDU_SCCP_ProtDataUnitError.destLocRef);
+      //Action Table follows
+
+      if (ConnectionTable[v_session].state==idle)
+      {//startif3
+        //assemble and route MTP3_ASP
+
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+         //then return to idle
+
+      }//endif3
+      else if (ConnectionTable[v_session].state==disconnect_pending)
+      { log("PDUError received in state:disconnect_pending ");}//discard message, return
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      { log("PDUError received in state:connection_pending_IC ");}//discard message, return
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      {//startif3
+        //assemble ASP_SCCP_N_
+        vl_N_DISCONNECT_ind.originator  :=cg_Undefined;
+        vl_N_DISCONNECT_ind.reason      :=pl_PDU_SCCP_ProtDataUnitError.errorCause;//?
+        vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+
+          //release resources, stop inactivity timers, change state to idle
+          ReleaseResources(v_session);
+      }//endif3
+      else if (ConnectionTable[v_session].state==active)
+      {//startif3
+        if (pl_PDU_SCCP_ProtDataUnitError.errorCause!=cg_Err_serviceClassMismatch)
+        {//startif4
+
+          //assemble ASP_SCCP_N_
+          vl_N_DISCONNECT_ind.originator:=cg_Undefined;
+          vl_N_DISCONNECT_ind.reason:=pl_PDU_SCCP_ProtDataUnitError.errorCause;//?
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //release resources
+          ReleaseResources(v_session);
+
+        }//endif4
+        else {//startelse -Service class mismatch
+
+          //assemble ASP_SCCP_N_
+
+          vl_N_DISCONNECT_ind.originator  :=cg_Undefined;
+          vl_N_DISCONNECT_ind.reason      :=pl_PDU_SCCP_ProtDataUnitError.errorCause;
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+          vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+              ));//send ASP_SCCP_N_DISCONNECT_ind
+
+           //stop inactivity timers
+          f_StopTimer(iar,v_session);
+          f_StopTimer(ias,v_session);
+          //send Released
+          //assemble and route MTP3_ASP
+
+          vl_PDU_SCCP.released.messageType:=rlsd;
+          vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference;
+          vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference;
+          vl_PDU_SCCP.released.releaseCause:=cg_Rel_inconsConnData;
+          vl_PDU_SCCP.released.pointer1:=0;//No optional part
+          vl_PDU_SCCP.released.optionalPart:=omit;
+          vl_PDU_SCCP.released.eop:=omit;
+
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+          //start release timer
+          f_StartTimer(rel,v_session);
+          //change state to diconnect pending
+          ConnectionTable[v_session].state:=disconnect_pending;
+
+        }//endelse
+
+      }//endif3
+      else if (ConnectionTable[v_session].state==connection_pending_OG)
+      {//startif3
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //assemble ASP_SCCP_N_
+
+        vl_N_DISCONNECT_ind.originator  :=cg_Undefined;
+        vl_N_DISCONNECT_ind.reason      :=pl_PDU_SCCP_ProtDataUnitError.errorCause;
+        vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+          vl_N_DISCONNECT_ind.originator,
+          omit,
+          vl_N_DISCONNECT_ind.reason,
+          omit,
+          vl_N_DISCONNECT_ind.connectionId,
+          omit
+        ));//send ASP_SCCP_N_DISCONNECT_ind
+        //release resources
+        ReleaseResources(v_session);
+      }//endif3
+      else if (ConnectionTable[v_session].state==wait_conn_confirm)
+      {//startif3
+
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //release resources
+        ReleaseResources(v_session);
+
+
+      }//endif3
+      else if (ConnectionTable[v_session].state==reset_IC)
+      {//startif3
+        //assemble ASP_SCCP_N_
+        vl_N_DISCONNECT_ind.originator:=cg_Undefined;
+        vl_N_DISCONNECT_ind.reason:=pl_PDU_SCCP_ProtDataUnitError.errorCause;
+        vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+
+        //release resources, stop inactivity timers, change state to idle
+        ReleaseResources(v_session);
+
+      }//endif3
+      else { log("PDUError received in an unexpected state");  }
+    }//endif2
+    else {}//PDU_Error received with destLocRef  not in ConnectionTable
+
+  }//processing_PDU_SCCP_ProtDataUnitError
+
+  //******************************************************************
+  //  processing_PDU_SCCP_ReleaseComplete
+  //******************************************************************
+  function processing_PDU_SCCP_ReleaseComplete(in PDU_SCCP_ReleaseComplete pl_PDU_SCCP_ReleaseComplete)
+  runs on SCCP_CT
+  {
+    var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ReleaseComplete.destLocRef))
+    {//startif1
+
+      v_session :=Retrieve_session(pl_PDU_SCCP_ReleaseComplete.destLocRef);
+      //check if remote reference is correct -Table B.2 /Q.714
+      if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ReleaseComplete.sourceLocRef)
+      {//startif2
+
+        //Action Table follows
+        if (ConnectionTable[v_session].state==idle)
+        { log("RLC received in state: idle"); }//C.3 1/6-do nothing-return to idle state
+        else if (ConnectionTable[v_session].state==connection_pending_IC)
+        { log("RLC received in state: connection_pending_IC"); }//discard message, return
+        else if (ConnectionTable[v_session].state==active)
+        { log("RLC received in state: active"); }//do nothing, return
+        else if (ConnectionTable[v_session].state==reset_bothway)
+        { log("RLC received in state:reset_bothway "); }//
+        else if (ConnectionTable[v_session].state==disconnect_pending)
+        {//startif3
+          log("RLC received in state:disconnect_pending ");
+          //log("release resources");
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==connection_pending_OG)
+        {//startif3
+          f_StopTimer(conn_est,v_session);
+          //assemble ASP_SCCP_N_
+          vl_N_DISCONNECT_ind.originator:=cg_NSU;
+          vl_N_DISCONNECT_ind.reason:=cg_DISC_normal;
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==wait_conn_confirm)
+        {//startif3
+          log("RLC received in state:wait_conn_confirm");
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==reset_IC)
+        {//startif3
+          log("RLC received in state:reset_IC");
+          //discard received message
+          f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+          //state changed to active
+          ConnectionTable[v_session].state:=active;
+        }//endif3
+        else { log("RLC received in an unexpected state");  }
+
+      }//endif2
+      else {}//remote reference inconsistent, discard
+
+    }//endif1
+    else {}//Release complete received with destLocRef  not in ConnectionTable
+    //discard
+
+  }//processing_PDU_SCCP_ReleaseComplete
+
+  //******************************************************************
+  //  processing_PDU_SCCP_InactivityTest
+  //******************************************************************
+  function processing_PDU_SCCP_InactivityTest( in PDU_SCCP_InactivityTest pl_PDU_SCCP_InactivityTest)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_InactivityTest.destLocRef))
+    {//startif1
+      v_session :=Retrieve_session(pl_PDU_SCCP_InactivityTest.destLocRef);
+
+      //check if remote reference is correct -Table B.2 /Q.714
+      if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_InactivityTest.sourceLocRef)
+      {//startif2
+
+        //Action Table follows
+        if (ConnectionTable[v_session].state==idle)
+        { log("IT received in state :idle "); }//C.3 1/6-do nothing-return to idle state
+        else if (ConnectionTable[v_session].state==connection_pending_IC)
+        { log("IT received in state : connection_pending_IC"); }//discard message, return
+        else if (ConnectionTable[v_session].state==connection_pending_OG)
+        {//startif3
+
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //assemble ASP_SCCP_N_
+          vl_N_DISCONNECT_ind.originator    := cg_NSU;
+          vl_N_DISCONNECT_ind.reason        := cg_DISC_normal;
+          vl_N_DISCONNECT_ind.connectionId  := ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //release resources
+          ReleaseResources(v_session);
+
+        }//endif3
+        else if (ConnectionTable[v_session].state==disconnect_pending) {}
+        else if (ConnectionTable[v_session].state==reset_bothway) {}//
+        else if (ConnectionTable[v_session].state==active)
+        {//startif3
+           //source reference number assumed OK
+          //or:
+          //if (ConnectionTable[v_session].remoteReference!=pl_PDU_SCCP_InactivityTest.sourceLocRef)
+          // release connection
+          //protocol class assumed 2
+          //restart receive inactivity timer
+          f_StopTimer(iar,v_session);//to avoid warnings
+          f_StartTimer(iar,v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==reset_IC)
+        {//startif3
+          //discard received message
+          f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+          //state changed to active
+          ConnectionTable[v_session].state:=active;
+        }//endif3
+        else if (ConnectionTable[v_session].state==wait_conn_confirm)
+        {//startif3
+
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //release resources
+          ReleaseResources(v_session);
+
+        }//endif3
+        else { log("IT received in an unexpected state");  }
+      }//endif2
+      else {//remote reference inconsistent, error action follows
+            //message received with remote reference not the same as stored
+            // two RLSD messages are sent back, one to the sored and to the received remote reference
+            //sent first RLSD-see B.2/Q.714
+
+        vl_PDU_SCCP.released.messageType :=rlsd;
+        vl_PDU_SCCP.released.destLocRef  :=pl_PDU_SCCP_InactivityTest.sourceLocRef;
+        vl_PDU_SCCP.released.sourceLocRef:=pl_PDU_SCCP_InactivityTest.destLocRef;
+        vl_PDU_SCCP.released.releaseCause:=cg_Rel_inconsConnData;
+        vl_PDU_SCCP.released.pointer1:=0;
+        vl_PDU_SCCP.released.optionalPart:=omit;
+        vl_PDU_SCCP.released.eop:=omit;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+        //sent second  RLSD-see B.2/Q.714
+        vl_PDU_SCCP.released.destLocRef :=ConnectionTable[v_session].remoteReference;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Released
+
+      }//endelse
+
+    }//endif1
+    else {}//Inactivity test received with destLocRef  not in ConnectionTable
+    //discard
+
+  }//processing_PDU_SCCP_InactivityTest
+
+  //******************************************************************
+  //   processing_PDU_SCCP_ResetRequest
+  //******************************************************************
+  function processing_PDU_SCCP_ResetRequest ( in PDU_SCCP_ResetRequest pl_PDU_SCCP_ResetRequest)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ResetRequest.destLocRef))
+    {//startif1
+      v_session :=Retrieve_session(pl_PDU_SCCP_ResetRequest.destLocRef);
+      //check if remote reference is correct -Table B.2 /Q.714
+
+      if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ResetRequest.sourceLocRef)
+      {//startif2
+        //Action Table follows
+        if (ConnectionTable[v_session].state==idle)
+        {//startif3
+
+          //assemble and route MTP3_ASP
+          vl_PDU_SCCP.pduerror.messageType:=err;
+          vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference;
+          vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+          MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+            (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+          //then return to idle
+
+        }//endif3
+        else if (ConnectionTable[v_session].state==connection_pending_IC) {}//discard message, return
+        else if (ConnectionTable[v_session].state==connection_pending_OG)
+        {//startif3
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //assemble ASP_SCCP_N_
+          var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+          vl_N_DISCONNECT_ind.originator:=cg_NSU;
+          vl_N_DISCONNECT_ind.reason:=cg_DISC_normal;
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==disconnect_pending) {}
+        else if (ConnectionTable[v_session].state==reset_bothway)
+        {//startif3
+
+          //assemble ASP_SCCP_N_
+          var ASP_SCCP_N_RESET_cfm vl_N_RESET_cfm;
+          vl_N_RESET_cfm.connectionId:=ConnectionTable[v_session].connectionId;
+          SCCP_SP_PORT.send( t_ASP_N_RESET_cfm(vl_N_RESET_cfm.connectionId));//send ASP_SCCP_N_RESET_cfm
+
+          //stop reset timer
+          f_StopTimer(reset,v_session);
+
+          //restart receive inactivity timer
+          f_StopTimer(iar,v_session);//to avoid warnings
+          f_StartTimer(iar,v_session);
+          //change state
+          ConnectionTable[v_session].state:=reset_IC;
+        }//endif3
+        else if (ConnectionTable[v_session].state==active)
+        {//startif3
+          //restart receive inactivity timer
+          f_StopTimer(iar,v_session);//to avoid warnings
+          f_StartTimer(iar,v_session);
+          //send ASP_SCCP_N_RESET_ind
+          //assemble ASP_SCCP_N_
+          var ASP_SCCP_N_RESET_ind vl_N_RESET_ind;
+          vl_N_RESET_ind.originator:=cg_NSU;
+          vl_N_RESET_ind.reason:=cg_RESET_unspec;
+          vl_N_RESET_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+          SCCP_SP_PORT.send( t_ASP_N_RESET_ind(
+            vl_N_RESET_ind.originator,
+            vl_N_RESET_ind.reason,
+            vl_N_RESET_ind.connectionId
+            ));//send ASP_SCCP_N_RESET_ind
+
+          //reset variables
+          ConnectionTable[v_session].state:=reset_IC;
+        }//endif3
+        else if (ConnectionTable[v_session].state==wait_conn_confirm)
+        {//startif3
+
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else { log("RESREQ received in an unexpected state");  }
+      }//endif2
+      else {//remote reference inconsistent, error action follows
+
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ResetRequest.sourceLocRef;
+        vl_PDU_SCCP.pduerror.errorCause:=cg_Err_inconsistentSourceLRN;
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+
+      }//endelse
+    }//endif1
+    else     {//startelse-Reset request received with destLocRef  not in ConnectionTable
+
+      //send ERR
+      vl_PDU_SCCP.pduerror.messageType:=err;
+      vl_PDU_SCCP.pduerror.destLocRef:=pl_PDU_SCCP_ResetRequest.sourceLocRef;
+      vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+      (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+
+    }//endelse
+
+  }//processing_PDU_SCCP_ResetRequest
+
+  //******************************************************************
+  //   processing_PDU_SCCP_ResetConfirm
+  //******************************************************************
+  function processing_PDU_SCCP_ResetConfirm ( in PDU_SCCP_ResetConfirm pl_PDU_SCCP_ResetConfirm)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ResetConfirm.destLocRef))
+    {//startif1
+      v_session :=Retrieve_session(pl_PDU_SCCP_ResetConfirm.destLocRef);
+
+      //check if remote reference is correct -Table B.2 /Q.714
+      if (ConnectionTable[v_session].remoteReference==pl_PDU_SCCP_ResetConfirm.sourceLocRef)
+      {//startif2
+        //Action Table follows
+
+        if (ConnectionTable[v_session].state==idle)
+        { log("RSC received in state:idle ");}//do nothing-return to idle state, no source ref known
+        else if (ConnectionTable[v_session].state==connection_pending_IC)
+        { log("RSC received in state:connection_pending_IC ");}//discard message, return
+        else if (ConnectionTable[v_session].state==connection_pending_OG)
+        {//startif3
+
+          var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //assemble ASP_SCCP_N_ASP
+
+          vl_N_DISCONNECT_ind.originator:=cg_NSU;
+          vl_N_DISCONNECT_ind.reason:=cg_DISC_normal;
+          vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+          SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+          //release resources
+          ReleaseResources(v_session);
+        }//endif3
+        else if (ConnectionTable[v_session].state==disconnect_pending)
+        { log("RSC received in state:disconnect_pending");}
+        else if (ConnectionTable[v_session].state==reset_bothway)
+        {//startif3
+          //assemble ASP_SCCP_N_
+          var ASP_SCCP_N_RESET_cfm vl_N_RESET_cfm;
+          vl_N_RESET_cfm.connectionId:=ConnectionTable[v_session].connectionId;
+          SCCP_SP_PORT.send( t_ASP_N_RESET_cfm(
+            vl_N_RESET_cfm.connectionId
+            ));//send ASP_SCCP_N_RESET_cfm
+
+          //stop reset timer
+          f_StopTimer(reset,v_session);
+
+          //restart receive inactivity timer
+          f_StopTimer(iar,v_session);//to avoid warnings
+          f_StartTimer(iar,v_session);
+          //change state
+          ConnectionTable[v_session].state:=reset_IC;
+        }//endif3
+        else if (ConnectionTable[v_session].state==active)
+        {//startif3
+          //do nothing-return to idle state
+          log("RSC received in state:active");
+        }//endif3
+        else if (ConnectionTable[v_session].state==reset_IC)
+        {//startif3
+          //discard received message
+          f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+          //state changed to active
+          ConnectionTable[v_session].state:=active;
+        }//endif3
+        else if (ConnectionTable[v_session].state==wait_conn_confirm)
+        {//startif3
+          //stop connection timer
+          f_StopTimer(conn_est,v_session);
+          //release resources
+          ReleaseResources(v_session);
+       }//endif3
+       else { log("ResConf received in an unexpected state");  }
+      }//endif2
+      else {//remote reference inconsistent, error action follows
+
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_ResetConfirm.sourceLocRef;
+        vl_PDU_SCCP.pduerror.errorCause :=cg_Err_inconsistentSourceLRN;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+
+      }//endelse
+    }//endif1
+    else       {//startelse-Reset confirm received with destLocRef  not in ConnectionTable
+
+      //send ERR
+      vl_PDU_SCCP.pduerror.messageType:=err;
+      vl_PDU_SCCP.pduerror.destLocRef :=pl_PDU_SCCP_ResetConfirm.sourceLocRef;
+      vl_PDU_SCCP.pduerror.errorCause :=cg_Err_unassignedDestinationLRN;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+    }//endelse
+  }//processing_PDU_SCCP_ResetConfirm
+
+  //******************************************************************
+  //   processing_PDU_SCCP_ConnectionRefused
+  //******************************************************************
+  function processing_PDU_SCCP_ConnectionRefused ( in PDU_SCCP_ConnectionRefused pl_PDU_SCCP_ConnectionRefused)
+  runs on SCCP_CT
+  {
+    //Store data parameter
+    var template SCCP_PAR_UserData tl_data := omit;
+    if (ispresent(pl_PDU_SCCP_ConnectionRefused.optionalPart))
+    {
+      if (ispresent(pl_PDU_SCCP_ConnectionRefused.optionalPart.data))
+      {
+         tl_data := pl_PDU_SCCP_ConnectionRefused.optionalPart.data.data;
+      }
+    }
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_ConnectionRefused.destLocRef))
+    {//startif2
+      v_session :=Retrieve_session(pl_PDU_SCCP_ConnectionRefused.destLocRef);
+      //Action Table follows
+
+      if (ConnectionTable[v_session].state==idle)
+      { log ("CREF received in state:idle");} //do nothing , return to idle, source ref unknown
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      { log ("CREF received in state:connection_pending_IC");}
+      else if (ConnectionTable[v_session].state==active)
+      { log ("CREF received in state:active");}//do nothing, return
+      else if (ConnectionTable[v_session].state==disconnect_pending)
+      { log ("CREF received in state:disconnect_pending");}//discard message, return
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      { log ("CREF received in state:reset_bothway");}//
+      else if (ConnectionTable[v_session].state==connection_pending_OG)
+      {//startif3
+        var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //assemble ASP_SCCP_N_
+        vl_N_DISCONNECT_ind.originator:=cg_Mapping_RefCause_Orig[pl_PDU_SCCP_ConnectionRefused.refusalCause];
+        vl_N_DISCONNECT_ind.reason:=cg_Mapping_RefCause_Reason[pl_PDU_SCCP_ConnectionRefused.refusalCause];
+        vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            tl_data,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+        //release resources
+        ReleaseResources(v_session);
+      }//endif3
+      else if (ConnectionTable[v_session].state==wait_conn_confirm)
+      {//startif3
+
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //release resources
+        ReleaseResources(v_session);
+
+      }//endif3
+      else if (ConnectionTable[v_session].state==reset_IC)
+      {//startif3
+
+        //discard received message
+        f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+        //state changed to active
+        ConnectionTable[v_session].state:=active;
+
+      }//endif3
+      else { log("CREF received in an unexpected state");  }
+
+    }//endif2
+    else { log("CREF received with destLocRef not in state table");  }
+    //Connection refused with destLocRef  not in ConnectionTable
+    //discard
+
+  } //processing_PDU_SCCP_ConnectionRefused
+
+  //******************************************************************
+  //   processing_PDU_SCCP_DataForm1
+  //******************************************************************
+  function processing_PDU_SCCP_DataForm1 ( in PDU_SCCP_DataForm1 pl_PDU_SCCP_DataForm1)
+  runs on SCCP_CT
+  {
+
+    //check if connection already established
+    if (ConnectionAlreadyEstablished(pl_PDU_SCCP_DataForm1.destLocRef))
+    {//startif2
+      v_session :=Retrieve_session(pl_PDU_SCCP_DataForm1.destLocRef);
+      //Action Table follows
+
+      if (ConnectionTable[v_session].state==idle)
+      {//startif3
+        var PDU_SCCP vl_PDU_SCCP;
+        //assemble and route MTP3_ASP
+        vl_PDU_SCCP.pduerror.messageType:=err;
+        vl_PDU_SCCP.pduerror.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.pduerror.errorCause:=cg_Err_unassignedDestinationLRN;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //Send Error
+
+          //then return to idle
+      }//endif3
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      { log ("DT1 received in state:connection_pending_IC");}//discard message, return
+      else if (ConnectionTable[v_session].state==disconnect_pending)
+      { log ("DT1 received in state:disconnect_pending");}//discard message, return
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      { log ("DT1 received in state:reset_bothway");}//
+      else if (ConnectionTable[v_session].state==connection_pending_OG)
+      {//startif3
+        var ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+        f_StopTimer(conn_est,v_session);
+        //assemble ASP_SCCP_N_
+        vl_N_DISCONNECT_ind.originator:=cg_NSU;
+        vl_N_DISCONNECT_ind.reason:=cg_DISC_normal;
+        vl_N_DISCONNECT_ind.connectionId:=ConnectionTable[v_session].connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+            ));//send ASP_SCCP_N_DISCONNECT_ind
+        //release resources
+        ReleaseResources(v_session);
+      }//endif3
+      else if (ConnectionTable[v_session].state==wait_conn_confirm)
+      {//startif3
+
+        //stop connection timer
+        f_StopTimer(conn_est,v_session);
+        //release resources
+        ReleaseResources(v_session);
+      }//endif3
+      else if (ConnectionTable[v_session].state==active)
+      {//startif3
+
+        var ASP_SCCP_N_DATA_ind vl_N_DATA_ind;
+        //restart receive inactivity  timer
+        f_StopTimer(iar,v_session);//to avoid warnings
+        f_StartTimer(iar,v_session);
+
+        buffered_sending_ASP_N_DATA_ind( pl_PDU_SCCP_DataForm1 )
+        //MODIFY-> protocol class assumed 2; M bit assumed 0 (no segm/reassembly)
+
+      }//endif3
+      else if (ConnectionTable[v_session].state==reset_IC)
+      {//startif3
+
+        //discard received message
+        f_StartTimer(internal_reset,v_session,0.0);//the timer times out immediately
+        //state changed to active
+        ConnectionTable[v_session].state:=active;
+
+      }//endif3
+      else { log("DT1 received in an unexpected state");  }
+
+    }//endif2
+    else { log("DT1 received with destLocRef  not in ConnectionTable"); }
+      //DT1 received with destLocRef  not in ConnectionTable
+      //discard
+
+  }//processing_PDU_SCCP_DataForm1
+
+
+  //******************************************************************
+  //   processing_PDU_SCCP_ExtUnitdata
+  //******************************************************************
+  function processing_PDU_SCCP_ExtUnitdata ( in PDU_SCCP_ExtUnitdata pl_PDU_SCCP_ExtUnitdata)
+  runs on SCCP_CT
+  {
+    var   integer               vl_index;
+    var   OCT3                  vl_segmRemoteRef;
+    if( ispresent( pl_PDU_SCCP_ExtUnitdata.optionalPart) and
+        ispresent( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation) )
+    {
+      vl_segmRemoteRef:= pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.segmLocalRef;
+      if( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.firstSegm =='1'B )
+      {
+         vl_index:=allocate_ClessRcvBuff( vl_segmRemoteRef);
+      }
+      else
+      {
+        vl_index:=get_ClessRcvBuffIndex( vl_segmRemoteRef );
+      };
+      if (vl_index == -1) 
+      { 
+        log("Buffer allocation failed, message ignored.");
+        return; 
+      }
+        
+      store_segmData(vl_index,pl_PDU_SCCP_ExtUnitdata);
+      if( pl_PDU_SCCP_ExtUnitdata.optionalPart.segmentation.remainingSegment == '0000'B )
+      {
+        send_ClessRcvBuff_in_N_UNITDATAind( vl_index,pl_PDU_SCCP_ExtUnitdata );
+        reallocate_ClessRcvBuff( vl_index );
+      }
+    }
+    else
+    { // not segmented case:
+      send_ClessData_in_N_UNITDATAind( pl_PDU_SCCP_ExtUnitdata );
+    }
+    return;
+
+  }//processing_PDU_SCCP_ExtUnitdata
+
+//******************************************************************
+//  Part 2  Receiving msg on port "SCCP_PORT" (User Part)
+//******************************************************************
+
+//******************************************************************
+//  processing_ASP_N_CONNECT_req
+// / ASP_SCCP_N_CONNECT_req ,   originating  node /
+//******************************************************************
+  function processing_ASP_N_CONNECT_req( in ASP_SCCP_N_CONNECT_req pl_N_CONNECT_req )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var        ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+
+    if (ConnectionAlreadyEstablished_connectionId(pl_N_CONNECT_req.connectionId))
+    // assume connectionId present
+    {//startif1
+
+      //something went wrong, we already have a session with the same connection Id
+      v_session :=Retrieve_session_connectionId(pl_N_CONNECT_req.connectionId);
+      //table of error actions
+
+    }//endif1
+    else
+    {//startelse1
+
+      //check if resources available
+      v_session:=CheckIdleIndividuals();
+      if (v_session==-1)     //No idle individual found
+      {//startif2
+
+        //assemble ASP_SCCP_N_ASP
+        vl_N_DISCONNECT_ind.originator:=cg_NSP; // network service provider
+        vl_N_DISCONNECT_ind.reason:=cg_CREF_unspec_T;
+        vl_N_DISCONNECT_ind.connectionId:=pl_N_CONNECT_req.connectionId;
+
+        SCCP_SP_PORT.send( t_ASP_N_DISCONNECT_ind(
+            vl_N_DISCONNECT_ind.originator,
+            omit,
+            vl_N_DISCONNECT_ind.reason,
+            omit,
+            vl_N_DISCONNECT_ind.connectionId,
+            omit
+        ));//send ASP_SCCP_N_DISCONNECT_ind
+        //return to idle
+      }//endif2
+
+      if ((v_session<=15)and (v_session>=0))
+      {//startif2
+
+        //assign local reference, SLS:=tsp_MTP3_SLS, protocol class:=2
+        ConnectionTable[v_session].localReference:=int2oct(pl_N_CONNECT_req.connectionId,3);
+        ConnectionTable[v_session].connectionId  :=pl_N_CONNECT_req.connectionId;
+
+        //to simplify generation of local reference, connectionID received from user is sent as such
+        //only local reference is assigned at this point
+        //send connection request, no coupling
+        //DPC :remote  node
+        //no coupling reqrd.
+        //compatibility OK
+        //no restriction
+        //assemble and route MTP3_ASP
+        vl_PDU_SCCP.connrequest.messageType:=cr;
+        vl_PDU_SCCP.connrequest.sourceLocRef:=ConnectionTable[v_session].localReference;
+        // send local reference just assigned!
+        vl_PDU_SCCP.connrequest.protClass:={
+          class:='0010'B,
+          messageHandling:='0000'B
+          };//class 2
+        vl_PDU_SCCP.connrequest.pointer1:=2;
+        vl_PDU_SCCP.connrequest.calledPAddress:=ConvertASPAddressToEncodedAddress(pl_N_CONNECT_req.calledAddress); //new!
+        vl_PDU_SCCP.connrequest.pointer2:=vl_PDU_SCCP.connrequest.calledPAddress.paramLength+2; //automatic?
+
+        if(ispresent(pl_N_CONNECT_req.callingAddress))
+        {//startif3
+
+          //temporary variable  to avoid type conversion problems
+          var SCCP_param_CPartyAddressEnc_opt   vl_SCCP_param_CPartyAddressEnc_opt;
+          var SCCP_param_CPartyAddressEnc       vl_SCCP_param_CPartyAddressEnc;
+
+          vl_SCCP_param_CPartyAddressEnc:=
+            ConvertASPAddressToEncodedAddress(pl_N_CONNECT_req.callingAddress);
+
+          vl_SCCP_param_CPartyAddressEnc_opt.paramName  :=con_SCCP_cgPA;
+          vl_SCCP_param_CPartyAddressEnc_opt.paramLength:=vl_SCCP_param_CPartyAddressEnc.paramLength;
+          vl_SCCP_param_CPartyAddressEnc_opt.addr       :=vl_SCCP_param_CPartyAddressEnc.addr;
+
+          vl_PDU_SCCP.connrequest.optionalPart.callingPAddress:=vl_SCCP_param_CPartyAddressEnc_opt;
+
+        }//endif3
+        else { vl_PDU_SCCP.connrequest.optionalPart.callingPAddress:=omit }
+
+        if(ispresent(pl_N_CONNECT_req.userData))
+        {//startif3
+
+            //temporary variable  to avoid type conversion problems
+            var SCCP_param_Data_opt  vl_SCCP_param_Data_opt;
+
+            vl_SCCP_param_Data_opt.paramName:=con_SCCP_data;
+            vl_SCCP_param_Data_opt.data:=pl_N_CONNECT_req.userData;
+            vl_SCCP_param_Data_opt.paramLength:=lengthof(vl_SCCP_param_Data_opt.data);
+            vl_PDU_SCCP.connrequest.optionalPart.data:=vl_SCCP_param_Data_opt;
+
+        }//endif3
+        else { vl_PDU_SCCP.connrequest.optionalPart.data:=omit}
+
+        if(ispresent(pl_N_CONNECT_req.callingAddress) or
+           ispresent(pl_N_CONNECT_req.userData))
+        {
+          vl_PDU_SCCP.connrequest.optionalPart.credit:=omit;
+          vl_PDU_SCCP.connrequest.optionalPart.hopCounter:=omit;
+          vl_PDU_SCCP.connrequest.optionalPart.importance:=omit;
+
+          vl_PDU_SCCP.connrequest.eop:= {paramName:=con_SCCP_eop};
+        }
+        else
+        {
+          vl_PDU_SCCP.connrequest.optionalPart := omit;
+          vl_PDU_SCCP.connrequest.eop := omit;
+        }
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Connection request
+
+        //start connection timer
+        f_StartTimer(conn_est,v_session);
+        ConnectionTable[v_session].state:=connection_pending_OG;
+      }//endif2
+
+    }//endelse
+
+  }//processing_ASP_N_CONNECT_req
+  //******************************************************************
+  //End ASP_SCCP_N_CONNECT_req ,   originating  node
+  //******************************************************************
+
+  //******************************************************************
+  //  processing_ASP_N_CONNECT_resp
+  //******************************************************************
+  function processing_ASP_N_CONNECT_res( in ASP_SCCP_N_CONNECT_res pl_N_CONNECT_res )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+
+    // first see if session exists in the ConnectionTable
+    //search done based on Connection ID
+
+    if (ConnectionAlreadyEstablished_connectionId(pl_N_CONNECT_res.connectionId))
+    //assume connectionId present
+    {//startif1
+      //retrieve session
+      v_session :=Retrieve_session_connectionId(pl_N_CONNECT_res.connectionId);
+
+      //Action Table follows
+
+      if (ConnectionTable[v_session].state==idle)
+      {
+        log("N_CONNECT_resp received in state:idle");
+        //do nothing-return to idle state
+      }
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      {//startif2
+
+        //assign SLS:=tsp_MTP3_SLS, assign protocol class=2 (CO, no flow ctrl.)
+
+        //assemble and route MTP3_ASP
+
+        vl_PDU_SCCP.connconfirm.messageType:=cc;
+        vl_PDU_SCCP.connconfirm.sourceLocRef:=ConnectionTable[v_session].localReference;
+        vl_PDU_SCCP.connconfirm.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.connconfirm.protClass.class:='0010'B;//protocol class 2
+        vl_PDU_SCCP.connconfirm.protClass.messageHandling:='0000'B;//no special treatment
+
+        if(ispresent(pl_N_CONNECT_res.respondingAddress))
+        {//startif3
+
+          //temporary variable  to avoid type conversion problems
+          var SCCP_param_CPartyAddressEnc_opt vl_SCCP_param_CPartyAddressEnc_opt;
+          var SCCP_param_CPartyAddressEnc     vl_SCCP_param_CPartyAddressEnc;
+
+          vl_SCCP_param_CPartyAddressEnc:=
+              ConvertASPAddressToEncodedAddress(pl_N_CONNECT_res.respondingAddress);
+
+          vl_SCCP_param_CPartyAddressEnc_opt.paramName  := con_SCCP_cdPA; // cgPA->cdPA  ethbaat, 2003.11.06
+          vl_SCCP_param_CPartyAddressEnc_opt.paramLength:= vl_SCCP_param_CPartyAddressEnc.paramLength;
+          vl_SCCP_param_CPartyAddressEnc_opt.addr       := vl_SCCP_param_CPartyAddressEnc.addr;
+
+          vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress:= vl_SCCP_param_CPartyAddressEnc_opt;
+        }//endif3
+        else { vl_PDU_SCCP.connconfirm.optionalPart.calledPAddress:=omit }
+
+        if(ispresent(pl_N_CONNECT_res.userData))
+        {//startif3
+
+          //temporary variable  to avoid type conversion problems
+          var SCCP_param_Data_opt  vl_SCCP_param_Data_opt;
+
+          vl_SCCP_param_Data_opt.paramName:=con_SCCP_data;
+          vl_SCCP_param_Data_opt.data:=pl_N_CONNECT_res.userData; // corrected by ethbaat 2003.10.16
+          vl_SCCP_param_Data_opt.paramLength:=lengthof(vl_SCCP_param_Data_opt.data);
+
+          vl_PDU_SCCP.connconfirm.optionalPart.data:=vl_SCCP_param_Data_opt;
+        }//endif3
+        else {vl_PDU_SCCP.connconfirm.optionalPart.data:=omit}
+
+        if(ispresent(pl_N_CONNECT_res.respondingAddress) or
+           ispresent(pl_N_CONNECT_res.userData))
+        {
+          vl_PDU_SCCP.connconfirm.pointer1:=1;
+          vl_PDU_SCCP.connconfirm.optionalPart.credit:=omit;
+          vl_PDU_SCCP.connconfirm.optionalPart.importance:=omit;
+          vl_PDU_SCCP.connconfirm.eop:= {paramName:=con_SCCP_eop};
+        }
+        else
+        {
+          vl_PDU_SCCP.connconfirm.pointer1:=0;
+          vl_PDU_SCCP.connconfirm.optionalPart := omit;
+          vl_PDU_SCCP.connconfirm.eop:=omit;
+        }
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send connection confirm
+
+        f_StartTimer(ias,v_session);  // ??? check them!!!
+        f_StartTimer(iar,v_session);  //start inactivity timers
+        ConnectionTable[v_session].state:=active;//state change
+
+      }//endif2
+      else { log("N_CONNECT_resp received in an unexpected state");}
+
+    }//endif1
+
+  }//processing_ASP_N_CONNECT_resp
+
+  //******************************************************************
+  //  processing_ASP_N_DATA_req
+  //******************************************************************
+
+  function processing_ASP_N_DATA_req( in ASP_SCCP_N_DATA_req pl_N_DATA_req )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+
+    // first see if session exists in the ConnectionTable
+
+    if (ConnectionAlreadyEstablished_connectionId(pl_N_DATA_req.connectionId))
+    //assume connectionId present
+    {//startif1
+
+      //retrieve v_session
+      v_session :=Retrieve_session_connectionId(pl_N_DATA_req.connectionId);
+
+      //Action Table follows
+      if (ConnectionTable[v_session].state==idle)
+      { log ("N_DATA_req received in idle state");}
+      else if (ConnectionTable[v_session].state==reset_bothway)
+      { log ("N_DATA_req received in reset_bothway state");}
+      else if (ConnectionTable[v_session].state==active)
+      {//startif2
+        sending_dataform1s_in_ASP_MTP_TRANSFERreqs(pl_N_DATA_req);
+        //no change of state, remains active
+      }//endif2
+      else { log ("N_DATA_req received in an unexpected state"); }
+
+    }//endif1
+    else { log("N_DATA_req with Connection ID not in the state table -- illegal request"); }
+
+  }//processing_ASP_N_DATA_req
+
+  //******************************************************************
+  //  processing_ASP_N_DISCONNECT_req
+  //******************************************************************
+
+  function processing_ASP_N_DISCONNECT_req( in ASP_SCCP_N_DISCONNECT_req pl_N_DISCONNECT_req )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var boolean vl_opt_part_present:=false;
+
+    // first see if session exists in the ConnectionTable
+
+    if (ConnectionAlreadyEstablished_connectionId(pl_N_DISCONNECT_req.connectionId))
+    //assume connectionId present
+    {//startif1
+
+      //retrieve v_session
+      v_session :=Retrieve_session_connectionId(pl_N_DISCONNECT_req.connectionId);
+
+      //Action Table follows
+      if (ConnectionTable[v_session].state==idle)
+      { log ("N_DISCONNECT_req received in state:idle");}
+      else if (ConnectionTable[v_session].state==connection_pending_IC)
+      {//startif2
+
+        //assemble and route MTP3_ASP
+        vl_PDU_SCCP.connrefused.messageType:=cref;
+        vl_PDU_SCCP.connrefused.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.connrefused.refusalCause:=pl_N_DISCONNECT_req.reason;
+        vl_PDU_SCCP.connrefused.pointer1:=0; //No optional part
+        vl_PDU_SCCP.connrefused.optionalPart:=omit;
+        vl_PDU_SCCP.connrefused.eop:=omit;
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send connection refused
+
+        //release resources
+        ReleaseResources(v_session);
+
+      }//endif2
+      else if (ConnectionTable[v_session].state==active)
+      {//startif2
+
+        //stop inactivity timers
+        f_StopTimer(ias,v_session);
+        f_StopTimer(iar,v_session);
+
+        //assemble and route MTP3_ASP
+
+        vl_PDU_SCCP.released.messageType:=rlsd;
+        vl_PDU_SCCP.released.destLocRef:=ConnectionTable[v_session].remoteReference;
+        vl_PDU_SCCP.released.sourceLocRef:=ConnectionTable[v_session].localReference;
+        vl_PDU_SCCP.released.releaseCause:=pl_N_DISCONNECT_req.reason;
+        if(ispresent(pl_N_DISCONNECT_req.userData)){
+          vl_opt_part_present:=true;
+          vl_PDU_SCCP.released.optionalPart.data.paramName:=con_SCCP_data;
+          vl_PDU_SCCP.released.optionalPart.data.paramLength:=lengthof(pl_N_DISCONNECT_req.userData);
+          vl_PDU_SCCP.released.optionalPart.data.data:=pl_N_DISCONNECT_req.userData;
+        } else {
+          vl_PDU_SCCP.released.optionalPart.data:=omit;
+        }
+        if(ispresent(pl_N_DISCONNECT_req.importance)){
+          vl_opt_part_present:=true;
+          vl_PDU_SCCP.released.optionalPart.importance.paramName:=con_SCCP_imp
+          vl_PDU_SCCP.released.optionalPart.importance.paramLength:=1
+          vl_PDU_SCCP.released.optionalPart.importance.importance:=pl_N_DISCONNECT_req.importance
+          vl_PDU_SCCP.released.optionalPart.importance.reserved:='00000'B
+        } else {
+          vl_PDU_SCCP.released.optionalPart.importance:=omit;
+        }
+        if(vl_opt_part_present){
+          vl_PDU_SCCP.released.pointer1:=1;
+          vl_PDU_SCCP.released.eop.paramName:=con_SCCP_eop;
+        } else {
+          vl_PDU_SCCP.released.pointer1:=0;//No optional part
+          vl_PDU_SCCP.released.optionalPart:=omit;
+          vl_PDU_SCCP.released.eop:=omit;
+        }
+
+        MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send released
+
+        //start release timer
+        f_StartTimer(rel,v_session);
+
+        ConnectionTable[v_session].state:=disconnect_pending;
+
+      }//endif2
+      else if (ConnectionTable[v_session].state==connection_pending_OG)
+      {//startif2
+
+        //change state to "wait connection confirm "
+        ConnectionTable[v_session].state:=wait_conn_confirm;
+        //and return
+
+      }//endif2
+      else { log("N_DISCONNECT_req received in an unexpected state");}
+
+    }//endif1
+
+  }//processing_ASP_N_DISCONNECT_req
+
+
+  //******************************************************************
+  //  function SCCP_SPC_int2bit - working function to processing_ASP_N_UNITDATA_req
+  // v_sio is local to SCCP_CT
+  // SCCPServiceType
+  //******************************************************************
+  function SCCP_SPC_int2bit( in integer pl_SPC, in SCCP_ServiceType pl_SCCP_ServiceType, in octetstring pl_SIO )
+  return SCCP_ASPfield_SignallingPointCode
+  {
+    var SCCP_ASPfield_SignallingPointCode vl_SPC; //bitstring
+    vl_SPC :='0000000000000000'B;
+
+    if( (pl_SCCP_ServiceType == mtp3_itu) or (pl_SCCP_ServiceType == mtp3b_itu))
+    {
+       //vl_SPC := '00'B&int2bit( pl_SPC, 14);
+       vl_SPC := int2bit( pl_SPC, 14);
+    }
+    else if ( (pl_SCCP_ServiceType == mtp3_ansi) or  (pl_SCCP_ServiceType == mtp3b_ansi) )
+    {
+       vl_SPC := int2bit( pl_SPC, 24);
+    }
+    else if( (pl_SCCP_ServiceType == mtp3_ttc) or (pl_SCCP_ServiceType == mtp3b_ttc) )
+    {
+      if( (pl_SIO == '83'O) or (pl_SIO == '43'O) or (pl_SIO == 'C3'O) ) //ttc national
+      {
+        vl_SPC := int2bit( pl_SPC, 16);
+      }
+      else if( pl_SIO == '03'O ) //ttc international
+      {
+        //vl_SPC := '00'B&int2bit( pl_SPC, 14);
+        vl_SPC := int2bit( pl_SPC, 14);
+      }
+      else { log ( "SIO setting error"); }
+    }
+    else if( pl_SCCP_ServiceType == mtp3_mpt )
+    {
+      var integer vl_NI := oct2int(pl_SIO)/64;
+      if( vl_NI == 2 ) //mpt national
+      {
+        vl_SPC := int2bit( pl_SPC, 24);
+      }
+      else //mpt international
+      {
+        vl_SPC := int2bit( pl_SPC, 14);
+      }
+    }
+    else
+    { log ( "ServiceType setting error. Use values",
+            "mtp3_itu, mtp3b_itu, mtp3_ansi, mtp3b_ansi,",
+            " mtp3_ttc, mtp3b_ttc, mtp3_mpt or m3ua");
+    }
+
+    return vl_SPC;
+
+  }// SCCP_SPC_int2bit
+
+  //******************************************************************
+  //  sending_udt_in_ASP_MTP_TRANSFERreqs
+  //  sends data in one step
+  //******************************************************************
+  function sending_udt_in_ASP_MTP_TRANSFERreqs( in SCCP_param_ProtocolClass     pl_protClass,
+                                                in SCCP_param_CPartyAddressEnc  pl_CalledPAddress,
+                                                in SCCP_param_CPartyAddressEnc  pl_CallingPAddress,
+                                                in SCCP_param_Data              pl_data)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    vl_PDU_SCCP.unitdata.messageType    := udt ;
+    vl_PDU_SCCP.unitdata.protClass      := pl_protClass;
+    vl_PDU_SCCP.unitdata.calledPAddress := pl_CalledPAddress;
+    vl_PDU_SCCP.unitdata.callingPAddress:= pl_CallingPAddress;
+    vl_PDU_SCCP.unitdata.data           := pl_data;
+    vl_PDU_SCCP.unitdata.pointer1 := 0;
+    vl_PDU_SCCP.unitdata.pointer2 := 0;
+    vl_PDU_SCCP.unitdata.pointer3 := 0;
+
+    MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+          (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP));//send Unitdata
+    return;
+
+  }//sending_udt_in_ASP_MTP_TRANSFERreqs
+
+  //******************************************************************
+  //  sending_xudt_in_ASP_MTP_TRANSFERreqs
+  //  segmentates and sends data to the encoder
+  //******************************************************************
+  function sending_xudt_in_ASP_MTP_TRANSFERreqs(in SCCP_param_ProtocolClass     pl_protClass,
+                                                in SCCP_param_CPartyAddressEnc  pl_CalledPAddress,
+                                                in SCCP_param_CPartyAddressEnc  pl_CallingPAddress,
+                                                in SCCP_param_Data              pl_data)
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var integer vl_actdatalen; //without length of paramLength field
+    var integer vl_len; // remaining data length without length of paramLength field
+    var integer vl_from;
+    var integer vl_overhead;
+    var integer vl_maxdatalen;
+    var integer vl_numberofPDUs; // ... to be sent
+
+    vl_PDU_SCCP.extudata.messageType            := xudt ; //len:1
+    vl_PDU_SCCP.extudata.hopCounter := 15; // check it in spec. //len:1
+    vl_PDU_SCCP.extudata.protClass              := pl_protClass; //len:1
+    vl_PDU_SCCP.extudata.pointer1               := 0; //len:4
+    vl_PDU_SCCP.extudata.pointer2               := 0;
+    vl_PDU_SCCP.extudata.pointer3               := 0;
+    vl_PDU_SCCP.extudata.pointer4               := 0;
+    vl_PDU_SCCP.extudata.calledPAddress         := pl_CalledPAddress;
+    vl_PDU_SCCP.extudata.callingPAddress        := pl_CallingPAddress;
+
+    vl_overhead := 15 +
+                    (vl_PDU_SCCP.extudata.calledPAddress.paramLength+1) +
+                    (vl_PDU_SCCP.extudata.callingPAddress.paramLength+1);
+
+    vl_len := pl_data.paramLength;
+    vl_maxdatalen := v_sccp_pdu_maxlen - vl_overhead -1; // -1:paramLength
+    vl_numberofPDUs := vl_len/vl_maxdatalen; // 0 if 1 PDU exists
+
+    // init segmentation:
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.segmLocalRef:= create_segmLocalRef();
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.firstSegm        := '1'B; //'yes'
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.paramName        := con_SCCP_segm;
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.paramLength      := 4;
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment := int2bit(vl_numberofPDUs,4);
+    vl_PDU_SCCP.extudata.optionalPart.segmentation.reserved         := '00'B;
+
+    if( pl_protClass.class == '0001'B )
+    { vl_PDU_SCCP.extudata.optionalPart.segmentation.class          := '1'B; }
+    else
+    { vl_PDU_SCCP.extudata.optionalPart.segmentation.class          := '0'B; };
+
+    vl_PDU_SCCP.extudata.optionalPart.importance:= omit; //len:0
+    vl_PDU_SCCP.extudata.eop.paramName := con_SCCP_eop;  //len:0
+
+    vl_from := 0;
+
+    while ( vl_len > 0 )
+    {
+      vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment := int2bit(vl_numberofPDUs,4);
+
+      if ( vl_len > vl_maxdatalen )
+      { vl_actdatalen := vl_maxdatalen; }
+      else
+      { vl_actdatalen := vl_len; };
+
+      vl_PDU_SCCP.extudata.data.data := substr( pl_data.data, vl_from, vl_actdatalen );
+      vl_PDU_SCCP.extudata.data.paramLength := vl_actdatalen;
+
+      MTP3_SCCP_PORT.send( t_ASP_MTP3_TRANSFERreq_sccp
+        (v_SIO,v_own_SPC,v_remote_SPC,v_SLS,vl_PDU_SCCP)); //send PDU_SCCP_ExtUnitdata
+
+      vl_PDU_SCCP.extudata.optionalPart.segmentation.firstSegm := '0'B; //'no'
+
+      vl_numberofPDUs := vl_numberofPDUs -1 ;
+      vl_from         := vl_from + vl_actdatalen;
+      vl_len          := vl_len  - vl_actdatalen;
+    }//while
+
+    log("Last remaining Segment:", vl_PDU_SCCP.extudata.optionalPart.segmentation.remainingSegment );
+
+    // not necessary, remove it:
+    //reset_segmLocalRef(vl_PDU_SCCP.extudata.optionalPart.segmentation.segmLocalRef);
+    return;
+  }//sending_xudt_in_ASP_MTP_TRANSFERreqs
+
+  //******************************************************************
+  //  processing_ASP_N_UNITDATA_req
+  //******************************************************************
+
+  function processing_ASP_N_UNITDATA_req( in ASP_SCCP_N_UNITDATA_req pl_N_UNITDATA_req )
+  runs on SCCP_CT
+  {
+    var PDU_SCCP vl_PDU_SCCP;
+    var SCCP_param_ProtocolClass vl_protClass;
+    var SCCP_param_CPartyAddressEnc vl_CalledPAddress, vl_CallingPAddress;
+    var integer vl_overhead_length;
+    var SCCP_param_Data vl_data;
+
+    // Protocol class mapping :
+    // old: vl_protClass.messageHandling:='0000'B;//no special options
+
+    // 3.6/ Q.713: bit1-4
+    if ( ispresent(pl_N_UNITDATA_req.sequenceControl) and
+      (substr(pl_N_UNITDATA_req.sequenceControl,7,1) == '1'B) ) //least significant bit!
+    { vl_protClass.class:='0001'B; }
+    else
+    { vl_protClass.class:='0000'B; } //changed to 0000 from 0001 ethbaat 2003-11-13
+
+    // 3.6/ Q.713: bit 5-8:
+    if ( ispresent(pl_N_UNITDATA_req.returnOption) and
+      (substr(pl_N_UNITDATA_req.returnOption,7,1) == '1'B) ) //least significant bit!
+    { vl_protClass.messageHandling:='1000'B}
+    else
+    { vl_protClass.messageHandling:='0000'B}
+
+    //Called Address mapping:
+    if (pl_N_UNITDATA_req.calledAddress.addressIndicator.pointCodeIndic=='1'B) //DPC included
+    {//startif1
+
+      if (bit2int(pl_N_UNITDATA_req.calledAddress.signPointCode) == v_remote_SPC ) // remote SPC
+      {//startif2
+        vl_CalledPAddress:=
+          ConvertASPAddressToEncodedAddress(pl_N_UNITDATA_req.calledAddress);
+      }
+      else
+      {
+        log("The remote SPC in ASP_SCCP_N_UNITDATA_req is not the same as the one you called by StartSCCP.ASP dropped")
+        return;
+      }
+
+    }//endif1
+    else
+    {  //DPC not present, use values local for component
+
+      var SCCP_PAR_Address vl_SCCP_PAR_Address;
+      vl_SCCP_PAR_Address := pl_N_UNITDATA_req.calledAddress;
+
+      if ( v_remote_SPC > 0)
+      {
+        vl_SCCP_PAR_Address.addressIndicator.pointCodeIndic :='1'B; // 3.4.1/Q713.
+        vl_SCCP_PAR_Address.addressIndicator.routingIndicator := cg_route_on_SSN;
+        // 14,24 or 16 bits:
+        vl_SCCP_PAR_Address.signPointCode    := SCCP_SPC_int2bit( v_remote_SPC, v_SCCPServiceType, v_SIO);
+      }
+      // vl_SCCP_PAR_Address.addressIndicator.ssnIndicator unchanged
+      // vl_SCCP_PAR_Address.addressIndicator.globalTitleIndic unchanged
+      // vl_SCCP_PAR_Address.subsystemNumber  unchanged
+      // vl_SCCP_PAR_Address.globalTitle      unchanged
+
+      vl_CalledPAddress :=
+          ConvertASPAddressToEncodedAddress(vl_SCCP_PAR_Address);
+
+    }//endif1
+
+    vl_CallingPAddress :=
+      ConvertASPAddressToEncodedAddress(pl_N_UNITDATA_req.callingAddress);
+
+    vl_data.data := pl_N_UNITDATA_req.userData;
+    vl_data.paramLength:= lengthof( pl_N_UNITDATA_req.userData);
+
+    // unitdata overhead calculation:
+    // msg type: 1; prot class: 2; 3 pointers: 3=> total:6
+    vl_overhead_length := (vl_CalledPAddress.paramLength+1) +
+                            (vl_CallingPAddress.paramLength +1)+ 6 ;
+
+    if( (tsp_force_xudt==0) and
+        (vl_overhead_length + vl_data.paramLength + 1) <=  v_sccp_pdu_maxlen )
+    {
+      sending_udt_in_ASP_MTP_TRANSFERreqs(vl_protClass,
+                                          vl_CalledPAddress,
+                                          vl_CallingPAddress,
+                                          vl_data );
+    }
+    else
+    {
+      sending_xudt_in_ASP_MTP_TRANSFERreqs(vl_protClass,
+                                          vl_CalledPAddress,
+                                          vl_CallingPAddress,
+                                          vl_data );
+    }
+
+  }//processing_ASP_N_UNITDATA_req
+
+//******************************************************************
+//******************************************************************
+function ScanEvents()  runs on SCCP_CT
+//******************************************************************
+//******************************************************************
+{//startfunction
+
+  var       PDU_SCCP vl_PDU_SCCP;
+
+  var        ASP_SCCP_N_CONNECT_req     vl_N_CONNECT_req;
+  var        ASP_SCCP_N_CONNECT_ind     vl_N_CONNECT_ind;
+  var        ASP_SCCP_N_CONNECT_res     vl_N_CONNECT_res;
+  var        ASP_SCCP_N_CONNECT_cfm     vl_N_CONNECT_cfm;
+  var        ASP_SCCP_N_DATA_req        vl_N_DATA_req;
+  var        ASP_SCCP_N_DATA_ind        vl_N_DATA_ind;
+  var        ASP_SCCP_N_DISCONNECT_req  vl_N_DISCONNECT_req;
+  var        ASP_SCCP_N_DISCONNECT_ind  vl_N_DISCONNECT_ind;
+  var        ASP_SCCP_N_UNITDATA_req    vl_N_UNITDATA_req;
+  var        ASP_SCCP_N_UNITDATA_ind    vl_N_UNITDATA_ind;
+  var        ASP_SCCP_N_NOTICE_ind      vl_N_NOTICE_ind;
+  
+  var integer i;
+  //this function  scans the MTP3 and user port for incoming messages and checks timers for timeout
+  
+  f_initialize_timer_states();
+
+  while (true)
+  {//startwhile
+
+    alt
+    //******************************************************************
+    {//startalt0
+    //******************************************************************
+    [] MTP3_SCCP_PORT.receive(PDU_SCCP : ? ) -> value vl_PDU_SCCP
+      {
+        //******************************************************************
+        //Unitdata received at destination node
+        //******************************************************************
+        if (ischosen(vl_PDU_SCCP.unitdata))
+        { 
+    //      vl_PDU_SCCP.unitdata.pointer1 :=3;
+    //      vl_PDU_SCCP.unitdata.pointer2 :=0;
+    //      vl_PDU_SCCP.unitdata.pointer3 :=0;
+          processing_PDU_SCCP_Unitdata( vl_PDU_SCCP.unitdata ); 
+        } 
+
+        //******************************************************************
+        //Data received at destination node
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.dataform1))
+        { 
+    //      vl_PDU_SCCP.dataform1.pointer1 :=1;
+          processing_PDU_SCCP_DataForm1( vl_PDU_SCCP.dataform1 ); 
+        } 
+
+        //******************************************************************
+        //Extended unitdata received at destination node
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.extudata))
+        { 
+    //      vl_PDU_SCCP.extudata.pointer1 :=0;
+    //      vl_PDU_SCCP.extudata.pointer2 :=0;
+    //      vl_PDU_SCCP.extudata.pointer3 :=0;
+    //      vl_PDU_SCCP.extudata.pointer4 :=0;
+          processing_PDU_SCCP_ExtUnitdata( vl_PDU_SCCP.extudata ); 
+        } 
+
+        //******************************************************************
+        //Connection request received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.connrequest))
+        { 
+    //      vl_PDU_SCCP.connrequest.pointer1 :=2;
+    //      vl_PDU_SCCP.connrequest.pointer2 :=0;
+          processing_PDU_SCCP_ConnectionRequest( vl_PDU_SCCP.connrequest ); 
+        } 
+
+        //******************************************************************
+        //Connection confirm received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.connconfirm))
+        { 
+    //      vl_PDU_SCCP.connconfirm.pointer1 :=1;
+          processing_PDU_SCCP_ConnectionConfirm( vl_PDU_SCCP.connconfirm ); 
+        } 
+
+        //******************************************************************
+        //Released received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.released))
+        { 
+    //      vl_PDU_SCCP.released.pointer1 :=1;
+          processing_PDU_SCCP_Released( vl_PDU_SCCP.released ); 
+        } 
+
+        //******************************************************************
+        //Release complete received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.relcomp))
+        { 
+          processing_PDU_SCCP_ReleaseComplete( vl_PDU_SCCP.relcomp ); 
+        } 
+
+        //******************************************************************
+        //Unitdata service  received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.udataserv))
+        { 
+    //      vl_PDU_SCCP.udataserv.pointer1 :=3;
+    //      vl_PDU_SCCP.udataserv.pointer2 :=0;
+    //      vl_PDU_SCCP.udataserv.pointer3 :=0;
+          processing_PDU_SCCP_UnitdataService( vl_PDU_SCCP.udataserv ); 
+        } 
+
+        //******************************************************************
+        //PDU_Error  received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.pduerror))
+        { 
+          processing_PDU_SCCP_ProtDataUnitError( vl_PDU_SCCP.pduerror ); 
+        } 
+
+        //******************************************************************
+        //Inactivity test received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.inacttest))
+        { 
+          processing_PDU_SCCP_InactivityTest( vl_PDU_SCCP.inacttest ); 
+        } 
+
+        //******************************************************************
+        //Reset request  received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.resetreq))
+        { 
+          processing_PDU_SCCP_ResetRequest( vl_PDU_SCCP.resetreq ); 
+        } 
+
+        //******************************************************************
+        //Reset confirm  received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.resconf))
+        { 
+          processing_PDU_SCCP_ResetConfirm( vl_PDU_SCCP.resconf ); 
+        } 
+
+        //******************************************************************
+        //Connection refused received
+        //******************************************************************
+        else if (ischosen(vl_PDU_SCCP.connrefused))
+        { 
+    //      vl_PDU_SCCP.connrefused.pointer1 :=1;
+          processing_PDU_SCCP_ConnectionRefused( vl_PDU_SCCP.connrefused ); 
+        }
+        else
+        { log ("Unsupported message received and discarded"); }
+      }
+
+    []MTP3_SCCP_PORT.receive 
+      { log("Unsupported or unrecognized message discarded after reception") }
+
+    //******************************************************************
+    //******************************************************************
+    ////start second alternative-message received on user  port
+    //******************************************************************
+    //******************************************************************
+
+    [] SCCP_SP_PORT.check  
+    {//start second alternative
+
+      alt { //startalt1-subalternatives vill follow
+
+          //******************************************************************
+          //N_DATA_req
+          //******************************************************************
+          [] SCCP_SP_PORT.receive( tr_ASP_N_DATA_req)-> value vl_N_DATA_req
+            { processing_ASP_N_DATA_req(vl_N_DATA_req); }
+
+          //******************************************************************
+          //N_UNITDATA_req at originating node
+          //******************************************************************
+          [] SCCP_SP_PORT.receive( tr_ASP_N_UNITDATA_req ) -> value vl_N_UNITDATA_req
+            { processing_ASP_N_UNITDATA_req(vl_N_UNITDATA_req); }
+
+           //******************************************************************
+          //N_CONNECT_req ,   originating  node
+          //******************************************************************
+          [] SCCP_SP_PORT.receive( tr_ASP_N_CONNECT_req) -> value vl_N_CONNECT_req
+            { processing_ASP_N_CONNECT_req( vl_N_CONNECT_req);}
+
+          //******************************************************************
+          //N_CONNECT_resp
+          //******************************************************************
+          [] SCCP_SP_PORT.receive( tr_ASP_N_CONNECT_res)-> value vl_N_CONNECT_res
+          { processing_ASP_N_CONNECT_res(vl_N_CONNECT_res); }
+
+         //******************************************************************
+          //N_DISCONNECT_req
+          //******************************************************************
+          [] SCCP_SP_PORT.receive( tr_ASP_N_DISCONNECT_req)-> value vl_N_DISCONNECT_req
+            { processing_ASP_N_DISCONNECT_req(vl_N_DISCONNECT_req); }
+
+          //******************************************************************
+          //N_RESET_resp  //will not be received!!
+          //******************************************************************
+          //[] SCCP_SP_PORT.receive( tr_ASP_N_RESET_resp)-> value vl_N_RESET_resp;
+
+          //******************************************************************
+          //N_RESET_req  //will not be received!!
+          //******************************************************************
+          //[] SCCP_SP_PORT.receive( tr_ASP_N_RESET_req)-> value vl_N_RESET_req;
+
+          //******************************************************************
+          //If none of the above , then message is removed from the top of the
+          //stack and discarded
+          //******************************************************************
+          [] SCCP_SP_PORT.receive
+            { }
+
+          }//endalt1
+
+    }//end second alternative-message received on user port
+
+        //******************************************************************
+        //connection timer expired
+        //******************************************************************   
+        [v_T_conn_est[0]]        T_conn_est[0].timeout         {Conn_Timer_Expired(0);
+                                                                v_T_conn_est[0] := false;}
+        [v_T_conn_est[1]]        T_conn_est[1].timeout         {Conn_Timer_Expired(1);
+                                                                v_T_conn_est[1] := false;}
+        [v_T_conn_est[2]]        T_conn_est[2].timeout         {Conn_Timer_Expired(2);
+                                                                v_T_conn_est[2] := false;}
+        [v_T_conn_est[3]]        T_conn_est[3].timeout         {Conn_Timer_Expired(3);
+                                                                v_T_conn_est[3] := false;}
+        [v_T_conn_est[4]]        T_conn_est[4].timeout         {Conn_Timer_Expired(4);
+                                                                v_T_conn_est[4] := false;}
+        [v_T_conn_est[5]]        T_conn_est[5].timeout         {Conn_Timer_Expired(5);
+                                                                v_T_conn_est[5] := false;}
+        [v_T_conn_est[6]]        T_conn_est[6].timeout         {Conn_Timer_Expired(6);
+                                                                v_T_conn_est[6] := false;}
+        [v_T_conn_est[7]]        T_conn_est[7].timeout         {Conn_Timer_Expired(7);
+                                                                v_T_conn_est[7] := false;}
+        [v_T_conn_est[8]]        T_conn_est[8].timeout         {Conn_Timer_Expired(8);
+                                                                v_T_conn_est[8] := false;}
+        [v_T_conn_est[9]]        T_conn_est[9].timeout         {Conn_Timer_Expired(9);
+                                                                v_T_conn_est[9] := false;}
+        [v_T_conn_est[10]]        T_conn_est[10].timeout         {Conn_Timer_Expired(10);
+                                                                v_T_conn_est[10] := false;}
+        [v_T_conn_est[11]]        T_conn_est[11].timeout         {Conn_Timer_Expired(11);
+                                                                v_T_conn_est[11] := false;}
+        [v_T_conn_est[12]]        T_conn_est[12].timeout         {Conn_Timer_Expired(12);
+                                                                v_T_conn_est[12] := false;}
+        [v_T_conn_est[13]]        T_conn_est[13].timeout         {Conn_Timer_Expired(13);
+                                                                v_T_conn_est[13] := false;}
+        [v_T_conn_est[14]]        T_conn_est[14].timeout         {Conn_Timer_Expired(14);
+                                                                v_T_conn_est[14] := false;}
+        [v_T_conn_est[15]]        T_conn_est[15].timeout         {Conn_Timer_Expired(15);
+                                                                v_T_conn_est[15] := false;}
+        
+        //******************************************************************
+        //send inactivity timer expired
+        //******************************************************************        
+        
+        [v_T_ias[0]]             T_ias[0].timeout              {SendInactivity_Timer_Expired(0);
+                                                                v_T_ias[0] := false;}
+        [v_T_ias[1]]             T_ias[1].timeout              {SendInactivity_Timer_Expired(1);
+                                                                v_T_ias[1] := false;}
+        [v_T_ias[2]]             T_ias[2].timeout              {SendInactivity_Timer_Expired(2);
+                                                                v_T_ias[2] := false;}
+        [v_T_ias[3]]             T_ias[3].timeout              {SendInactivity_Timer_Expired(3);
+                                                                v_T_ias[3] := false;}
+        [v_T_ias[4]]             T_ias[4].timeout              {SendInactivity_Timer_Expired(4);
+                                                                v_T_ias[4] := false;}
+        [v_T_ias[5]]             T_ias[5].timeout              {SendInactivity_Timer_Expired(5);
+                                                                v_T_ias[5] := false;}
+        [v_T_ias[6]]             T_ias[6].timeout              {SendInactivity_Timer_Expired(6);
+                                                                v_T_ias[6] := false;}
+        [v_T_ias[7]]             T_ias[7].timeout              {SendInactivity_Timer_Expired(7);
+                                                                v_T_ias[7] := false;}
+        [v_T_ias[8]]             T_ias[8].timeout              {SendInactivity_Timer_Expired(8);
+                                                                v_T_ias[8] := false;}
+        [v_T_ias[9]]             T_ias[9].timeout              {SendInactivity_Timer_Expired(9);
+                                                                v_T_ias[i] := false;}
+        [v_T_ias[10]]             T_ias[10].timeout              {SendInactivity_Timer_Expired(10);
+                                                                v_T_ias[10] := false;}
+        [v_T_ias[11]]             T_ias[11].timeout              {SendInactivity_Timer_Expired(11);
+                                                                v_T_ias[11] := false;}
+        [v_T_ias[12]]             T_ias[12].timeout              {SendInactivity_Timer_Expired(12);
+                                                                v_T_ias[12] := false;}
+        [v_T_ias[13]]             T_ias[13].timeout              {SendInactivity_Timer_Expired(13);
+                                                                v_T_ias[13] := false;}
+        [v_T_ias[14]]             T_ias[14].timeout              {SendInactivity_Timer_Expired(14);
+                                                                v_T_ias[14] := false;}
+        [v_T_ias[15]]             T_ias[15].timeout              {SendInactivity_Timer_Expired(15);
+                                                                v_T_ias[15] := false;}
+        
+        //******************************************************************
+        //receive inactivity timer expired
+        //******************************************************************        
+        [v_T_iar[0]]             T_iar[0].timeout              {ReceiveInactivity_Timer_Expired(0);
+                                                                v_T_iar[0] := false;}
+        [v_T_iar[1]]             T_iar[1].timeout              {ReceiveInactivity_Timer_Expired(1);
+                                                                v_T_iar[1] := false;}
+        [v_T_iar[2]]             T_iar[2].timeout              {ReceiveInactivity_Timer_Expired(2);
+                                                                v_T_iar[2] := false;}
+        [v_T_iar[3]]             T_iar[3].timeout              {ReceiveInactivity_Timer_Expired(3);
+                                                                v_T_iar[3] := false;}
+        [v_T_iar[4]]             T_iar[4].timeout              {ReceiveInactivity_Timer_Expired(4);
+                                                                v_T_iar[4] := false;}
+        [v_T_iar[5]]             T_iar[5].timeout              {ReceiveInactivity_Timer_Expired(5);
+                                                                v_T_iar[5] := false;}
+        [v_T_iar[6]]             T_iar[6].timeout              {ReceiveInactivity_Timer_Expired(6);
+                                                                v_T_iar[6] := false;}
+        [v_T_iar[7]]             T_iar[7].timeout              {ReceiveInactivity_Timer_Expired(7);
+                                                                v_T_iar[7] := false;}
+        [v_T_iar[8]]             T_iar[8].timeout              {ReceiveInactivity_Timer_Expired(8);
+                                                                v_T_iar[8] := false;}
+        [v_T_iar[9]]             T_iar[9].timeout              {ReceiveInactivity_Timer_Expired(9);
+                                                                v_T_iar[9] := false;}
+        [v_T_iar[10]]             T_iar[10].timeout              {ReceiveInactivity_Timer_Expired(10);
+                                                                v_T_iar[10] := false;}
+        [v_T_iar[11]]             T_iar[11].timeout              {ReceiveInactivity_Timer_Expired(11);
+                                                                v_T_iar[11] := false;}
+        [v_T_iar[12]]             T_iar[12].timeout              {ReceiveInactivity_Timer_Expired(12);
+                                                                v_T_iar[12] := false;}
+        [v_T_iar[13]]             T_iar[13].timeout              {ReceiveInactivity_Timer_Expired(13);
+                                                                v_T_iar[13] := false;}
+        [v_T_iar[14]]             T_iar[14].timeout              {ReceiveInactivity_Timer_Expired(14);
+                                                                v_T_iar[14] := false;}
+        [v_T_iar[15]]             T_iar[15].timeout              {ReceiveInactivity_Timer_Expired(15);
+                                                                v_T_iar[15] := false;}
+         
+        //******************************************************************
+        //release timer expired
+        //******************************************************************        
+        [v_T_rel[0]]             T_rel[0].timeout              {Release_Timer_Expired(0);
+                                                                v_T_rel[0] := false;}
+        [v_T_rel[1]]             T_rel[1].timeout              {Release_Timer_Expired(1);
+                                                                v_T_rel[1] := false;}
+        [v_T_rel[2]]             T_rel[2].timeout              {Release_Timer_Expired(2);
+                                                                v_T_rel[2] := false;}
+        [v_T_rel[3]]             T_rel[3].timeout              {Release_Timer_Expired(3);
+                                                                v_T_rel[3] := false;}
+        [v_T_rel[4]]             T_rel[4].timeout              {Release_Timer_Expired(4);
+                                                                v_T_rel[4] := false;}
+        [v_T_rel[5]]             T_rel[5].timeout              {Release_Timer_Expired(5);
+                                                                v_T_rel[5] := false;}
+        [v_T_rel[6]]             T_rel[6].timeout              {Release_Timer_Expired(6);
+                                                                v_T_rel[6] := false;}
+        [v_T_rel[7]]             T_rel[7].timeout              {Release_Timer_Expired(7);
+                                                                v_T_rel[7] := false;}
+        [v_T_rel[8]]             T_rel[8].timeout              {Release_Timer_Expired(8);
+                                                                v_T_rel[8] := false;}
+        [v_T_rel[9]]             T_rel[9].timeout              {Release_Timer_Expired(9);
+                                                                v_T_rel[9] := false;}
+        [v_T_rel[10]]             T_rel[10].timeout              {Release_Timer_Expired(10);
+                                                                v_T_rel[10] := false;}
+        [v_T_rel[11]]             T_rel[11].timeout              {Release_Timer_Expired(11);
+                                                                v_T_rel[11] := false;}
+        [v_T_rel[12]]             T_rel[12].timeout              {Release_Timer_Expired(12);
+                                                                v_T_rel[12] := false;}
+        [v_T_rel[13]]             T_rel[13].timeout              {Release_Timer_Expired(13);
+                                                                v_T_rel[13] := false;}
+        [v_T_rel[14]]             T_rel[14].timeout              {Release_Timer_Expired(14);
+                                                                v_T_rel[14] := false;}
+        [v_T_rel[15]]             T_rel[15].timeout              {Release_Timer_Expired(15);
+                                                                v_T_rel[15] := false;}
+                
+        //******************************************************************
+        //repeat release timer expired
+        //******************************************************************        
+        
+        [v_T_repeat_rel[0]]             T_repeat_rel[0].timeout              {RepeatRelease_Timer_Expired(0);
+                                                                v_T_repeat_rel[0] := false;}
+        [v_T_repeat_rel[1]]             T_repeat_rel[1].timeout              {RepeatRelease_Timer_Expired(1);
+                                                                v_T_repeat_rel[1] := false;}
+        [v_T_repeat_rel[2]]             T_repeat_rel[2].timeout              {RepeatRelease_Timer_Expired(2);
+                                                                v_T_repeat_rel[2] := false;}
+        [v_T_repeat_rel[3]]             T_repeat_rel[3].timeout              {RepeatRelease_Timer_Expired(3);
+                                                                v_T_repeat_rel[3] := false;}
+        [v_T_repeat_rel[4]]             T_repeat_rel[4].timeout              {RepeatRelease_Timer_Expired(4);
+                                                                v_T_repeat_rel[4] := false;}
+        [v_T_repeat_rel[5]]             T_repeat_rel[5].timeout              {RepeatRelease_Timer_Expired(5);
+                                                                v_T_repeat_rel[5] := false;}
+        [v_T_repeat_rel[6]]             T_repeat_rel[6].timeout              {RepeatRelease_Timer_Expired(6);
+                                                                v_T_repeat_rel[6] := false;}
+        [v_T_repeat_rel[7]]             T_repeat_rel[7].timeout              {RepeatRelease_Timer_Expired(7);
+                                                                v_T_repeat_rel[7] := false;}
+        [v_T_repeat_rel[8]]             T_repeat_rel[8].timeout              {RepeatRelease_Timer_Expired(8);
+                                                                v_T_repeat_rel[8] := false;}
+        [v_T_repeat_rel[9]]             T_repeat_rel[9].timeout              {RepeatRelease_Timer_Expired(9);
+                                                                v_T_repeat_rel[9] := false;}
+        [v_T_repeat_rel[10]]             T_repeat_rel[10].timeout              {RepeatRelease_Timer_Expired(10);
+                                                                v_T_repeat_rel[10] := false;}
+        [v_T_repeat_rel[11]]             T_repeat_rel[11].timeout              {RepeatRelease_Timer_Expired(11);
+                                                                v_T_repeat_rel[11] := false;}
+        [v_T_repeat_rel[12]]             T_repeat_rel[12].timeout              {RepeatRelease_Timer_Expired(12);
+                                                                v_T_repeat_rel[12] := false;}
+        [v_T_repeat_rel[13]]             T_repeat_rel[13].timeout              {RepeatRelease_Timer_Expired(13);
+                                                                v_T_repeat_rel[13] := false;}
+        [v_T_repeat_rel[14]]             T_repeat_rel[14].timeout              {RepeatRelease_Timer_Expired(14);
+                                                                v_T_repeat_rel[14] := false;}
+        [v_T_repeat_rel[15]]             T_repeat_rel[15].timeout              {RepeatRelease_Timer_Expired(15);
+                                                                v_T_repeat_rel[15] := false;}
+        
+        //******************************************************************
+        //interval timer expired
+        //******************************************************************        
+        [v_T_int[0]]             T_int[0].timeout              {Interval_Timer_Expired(0);
+                                                                v_T_int[0] := false;}
+        [v_T_int[1]]             T_int[1].timeout              {Interval_Timer_Expired(1);
+                                                                v_T_int[1] := false;}
+        [v_T_int[2]]             T_int[2].timeout              {Interval_Timer_Expired(2);
+                                                                v_T_int[2] := false;}
+        [v_T_int[3]]             T_int[3].timeout              {Interval_Timer_Expired(3);
+                                                                v_T_int[3] := false;}
+        [v_T_int[4]]             T_int[4].timeout              {Interval_Timer_Expired(4);
+                                                                v_T_int[4] := false;}
+        [v_T_int[5]]             T_int[5].timeout              {Interval_Timer_Expired(5);
+                                                                v_T_int[5] := false;}
+        [v_T_int[6]]             T_int[6].timeout              {Interval_Timer_Expired(6);
+                                                                v_T_int[6] := false;}
+        [v_T_int[7]]             T_int[7].timeout              {Interval_Timer_Expired(7);
+                                                                v_T_int[7] := false;}
+        [v_T_int[8]]             T_int[8].timeout              {Interval_Timer_Expired(8);
+                                                                v_T_int[8] := false;}
+        [v_T_int[9]]             T_int[9].timeout              {Interval_Timer_Expired(9);
+                                                                v_T_int[9] := false;}
+        [v_T_int[10]]             T_int[10].timeout              {Interval_Timer_Expired(10);
+                                                                v_T_int[10] := false;}
+        [v_T_int[11]]             T_int[11].timeout              {Interval_Timer_Expired(11);
+                                                                v_T_int[11] := false;}
+        [v_T_int[12]]             T_int[12].timeout              {Interval_Timer_Expired(12);
+                                                                v_T_int[12] := false;}
+        [v_T_int[13]]             T_int[13].timeout              {Interval_Timer_Expired(13);
+                                                                v_T_int[13] := false;}
+        [v_T_int[14]]             T_int[14].timeout              {Interval_Timer_Expired(14);
+                                                                v_T_int[14] := false;}
+        [v_T_int[15]]             T_int[15].timeout              {Interval_Timer_Expired(15);
+                                                                v_T_int[15] := false;}
+        
+        //******************************************************************
+        //reset timer expired
+        //******************************************************************                       
+        [v_T_reset[0]]             T_reset[0].timeout              {Reset_Timer_Expired(0);
+                                                                v_T_reset[0] := false;}
+        [v_T_reset[1]]             T_reset[1].timeout              {Reset_Timer_Expired(1);
+                                                                v_T_reset[1] := false;}
+        [v_T_reset[2]]             T_reset[2].timeout              {Reset_Timer_Expired(2);
+                                                                v_T_reset[2] := false;}
+        [v_T_reset[3]]             T_reset[3].timeout              {Reset_Timer_Expired(3);
+                                                                v_T_reset[3] := false;}
+        [v_T_reset[4]]             T_reset[4].timeout              {Reset_Timer_Expired(4);
+                                                                v_T_reset[4] := false;}
+        [v_T_reset[5]]             T_reset[5].timeout              {Reset_Timer_Expired(5);
+                                                                v_T_reset[5] := false;}
+        [v_T_reset[6]]             T_reset[6].timeout              {Reset_Timer_Expired(6);
+                                                                v_T_reset[6] := false;}
+        [v_T_reset[7]]             T_reset[7].timeout              {Reset_Timer_Expired(7);
+                                                                v_T_reset[7] := false;}
+        [v_T_reset[8]]             T_reset[8].timeout              {Reset_Timer_Expired(8);
+                                                                v_T_reset[8] := false;}
+        [v_T_reset[9]]             T_reset[9].timeout              {Reset_Timer_Expired(9);
+                                                                v_T_reset[9] := false;}
+        [v_T_reset[10]]             T_reset[10].timeout              {Reset_Timer_Expired(10);
+                                                                v_T_reset[10] := false;}
+        [v_T_reset[11]]             T_reset[11].timeout              {Reset_Timer_Expired(11);
+                                                                v_T_reset[11] := false;}
+        [v_T_reset[12]]             T_reset[12].timeout              {Reset_Timer_Expired(12);
+                                                                v_T_reset[12] := false;}
+        [v_T_reset[13]]             T_reset[13].timeout              {Reset_Timer_Expired(13);
+                                                                v_T_reset[13] := false;}
+        [v_T_reset[14]]             T_reset[14].timeout              {Reset_Timer_Expired(14);
+                                                                v_T_reset[14] := false;}
+        [v_T_reset[15]]             T_reset[15].timeout              {Reset_Timer_Expired(15);
+                                                                v_T_reset[15] := false;}
+        
+        //******************************************************************
+        //internal_reset timer expired-sending internal signals!
+        //******************************************************************                        
+       [v_T_internal_reset[0]]             T_internal_reset[0].timeout              {InternalResetTimer_Expired(0);
+                                                                v_T_internal_reset[0] := false;}
+        [v_T_internal_reset[1]]             T_internal_reset[1].timeout              {InternalResetTimer_Expired(1);
+                                                                v_T_internal_reset[1] := false;}
+        [v_T_internal_reset[2]]             T_internal_reset[2].timeout              {InternalResetTimer_Expired(2);
+                                                                v_T_internal_reset[2] := false;}
+        [v_T_internal_reset[3]]             T_internal_reset[3].timeout              {InternalResetTimer_Expired(3);
+                                                                v_T_internal_reset[3] := false;}
+        [v_T_internal_reset[4]]             T_internal_reset[4].timeout              {InternalResetTimer_Expired(4);
+                                                                v_T_internal_reset[4] := false;}
+        [v_T_internal_reset[5]]             T_internal_reset[5].timeout              {InternalResetTimer_Expired(5);
+                                                                v_T_internal_reset[5] := false;}
+        [v_T_internal_reset[6]]             T_internal_reset[6].timeout              {InternalResetTimer_Expired(6);
+                                                                v_T_internal_reset[6] := false;}
+        [v_T_internal_reset[7]]             T_internal_reset[7].timeout              {InternalResetTimer_Expired(7);
+                                                                v_T_internal_reset[7] := false;}
+        [v_T_internal_reset[8]]             T_internal_reset[8].timeout              {InternalResetTimer_Expired(8);
+                                                                v_T_internal_reset[8] := false;}
+        [v_T_internal_reset[9]]             T_internal_reset[9].timeout              {InternalResetTimer_Expired(9);
+                                                                v_T_internal_reset[9] := false;}
+        [v_T_internal_reset[10]]             T_internal_reset[10].timeout              {InternalResetTimer_Expired(10);
+                                                                v_T_internal_reset[10] := false;}
+        [v_T_internal_reset[11]]             T_internal_reset[11].timeout              {InternalResetTimer_Expired(11);
+                                                                v_T_internal_reset[11] := false;}
+        [v_T_internal_reset[12]]             T_internal_reset[12].timeout              {InternalResetTimer_Expired(12);
+                                                                v_T_internal_reset[12] := false;}
+        [v_T_internal_reset[13]]             T_internal_reset[13].timeout              {InternalResetTimer_Expired(13);
+                                                                v_T_internal_reset[13] := false;}
+        [v_T_internal_reset[14]]             T_internal_reset[14].timeout              {InternalResetTimer_Expired(14);
+                                                                v_T_internal_reset[14] := false;}
+        [v_T_internal_reset[15]]             T_internal_reset[15].timeout              {InternalResetTimer_Expired(15);
+                                                                v_T_internal_reset[15] := false;}
+        
+       //******************************************************************
+       //guard timer expired - no answer to ASP_SCCP_N_CONNECT_ind received
+       //******************************************************************                        
+        [v_T_guard[0]]             T_guard[0].timeout              {GuardTimer_Expired(0);
+                                                                v_T_guard[0] := false;}
+        [v_T_guard[1]]             T_guard[1].timeout              {GuardTimer_Expired(1);
+                                                                v_T_guard[1] := false;}
+        [v_T_guard[2]]             T_guard[2].timeout              {GuardTimer_Expired(2);
+                                                                v_T_guard[2] := false;}
+        [v_T_guard[3]]             T_guard[3].timeout              {GuardTimer_Expired(3);
+                                                                v_T_guard[3] := false;}
+        [v_T_guard[4]]             T_guard[4].timeout              {GuardTimer_Expired(4);
+                                                                v_T_guard[4] := false;}
+        [v_T_guard[5]]             T_guard[5].timeout              {GuardTimer_Expired(5);
+                                                                v_T_guard[5] := false;}
+        [v_T_guard[6]]             T_guard[6].timeout              {GuardTimer_Expired(6);
+                                                                v_T_guard[6] := false;}
+        [v_T_guard[7]]             T_guard[7].timeout              {GuardTimer_Expired(7);
+                                                                v_T_guard[7] := false;}
+        [v_T_guard[8]]             T_guard[8].timeout              {GuardTimer_Expired(8);
+                                                                v_T_guard[8] := false;}
+        [v_T_guard[9]]             T_guard[9].timeout              {GuardTimer_Expired(9);
+                                                                v_T_guard[9] := false;}
+        [v_T_guard[10]]             T_guard[10].timeout              {GuardTimer_Expired(10);
+                                                                v_T_guard[10] := false;}
+        [v_T_guard[11]]             T_guard[11].timeout              {GuardTimer_Expired(11);
+                                                                v_T_guard[11] := false;}
+        [v_T_guard[12]]             T_guard[12].timeout              {GuardTimer_Expired(12);
+                                                                v_T_guard[12] := false;}
+        [v_T_guard[13]]             T_guard[13].timeout              {GuardTimer_Expired(13);
+                                                                v_T_guard[13] := false;}
+        [v_T_guard[14]]             T_guard[14].timeout              {GuardTimer_Expired(14);
+                                                                v_T_guard[14] := false;}
+        [v_T_guard[15]]             T_guard[15].timeout              {GuardTimer_Expired(15);
+                                                                v_T_guard[15] := false;}
+
+
+    }//endalt0
+
+  //******************************************************************
+  }//endwhile
+  //******************************************************************
+
+}//endfunction ScanEvents
+
+//******************************************************************
+}//endgroup SCCPFunctions
+//******************************************************************
+
+}//endmodule
diff --git a/SCCP_CNL113341/src/SCCP_EncDec.cc b/SCCP_CNL113341/src/SCCP_EncDec.cc
new file mode 100644
index 0000000..f00b08a
--- /dev/null
+++ b/SCCP_CNL113341/src/SCCP_EncDec.cc
@@ -0,0 +1,19 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2007                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//  File:         SCCP_EncDec.cc
+//  Rev:          R6A05
+//  Prodnr:       CNL 113 341
+//  Updated:      2007-09-17
+//  Contact:      http://ttcn.ericsson.se
+
+// Please note: Because the encoder/decoder functions are generated by the 
+// TITAN, the SCCP_EncDec.cc is kept only for compatibility issue and 
+// should be removed from the projects.
diff --git a/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp b/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp
new file mode 100644
index 0000000..0de496b
--- /dev/null
+++ b/SCCP_CNL113341/src/SCCP_Mapping.ttcnpp
@@ -0,0 +1,129 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2012                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//  File:         SCCP_Mapping.ttcnpp
+//  Description:  SCCP <-> MTP3 dual faced port definition
+//  Rev:          R6A05
+//  Prodnr:       CNL 113 341
+//  Updated:      2012-11-05
+//  Contact:      http://ttcn.ericsson.se
+module SCCP_Mapping
+{
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+import from SCCP_Types  all;
+import from SCCPasp_Types all;
+
+// *************************************************************************
+// *************************************************************************
+//SCCP Component related declarations
+// *************************************************************************
+// *************************************************************************
+
+type integer UnhandledProtocol;
+
+//   SCCPasp_SP_PT SCCP_SP_PORT
+//+-----------------+-----------------+
+//|              SCCP_CT              /
+//|                                   /
+//+-----------------+-----------------+
+//MTP3asp_SCCP_PT MTP3_SCCP_PORT
+//                  |
+//
+
+//#ifdef USE_MTP3_DISTRIBUTOR
+//Version to internal port
+type port MTP3asp_SCCP_PT  message
+{
+  in  PDU_SCCP;
+  out ASP_MTP3_TRANSFERreq_sccp;
+}
+with 
+{ extension 
+   "internal user MTP3asp_PT
+    out(ASP_MTP3_TRANSFERreq_sccp 
+         -> ASP_MTP3_TRANSFERreq: function(f_enc_SCCP_to_MTP))
+    in( ASP_MTP3_TRANSFERind
+         -> PDU_SCCP: function(f_dec_MTP_to_SCCP),
+            - : discard;
+        ASP_MTP3_PAUSE -> -: discard;
+        ASP_MTP3_RESUME -> -: discard;
+        ASP_MTP3_STATUS -> -: discard)
+   "
+}
+/*#else
+//Version to external port
+type port MTP3asp_SCCP_PT  message
+{
+  in  PDU_SCCP;
+  in  UnhandledProtocol;
+  out ASP_MTP3_TRANSFERreq_sccp;
+}
+with 
+{ extension 
+   "user MTP3asp_PT
+    out(ASP_MTP3_TRANSFERreq_sccp 
+         -> ASP_MTP3_TRANSFERreq: function(f_enc_SCCP_to_MTP))
+    in( ASP_MTP3_TRANSFERind ->
+          PDU_SCCP: function(f_dec_MTP_to_SCCP),
+          UnhandledProtocol: function(f_dec_MTP_to_UnhandledProtocol);
+        ASP_MTP3_PAUSE -> -: discard;
+        ASP_MTP3_RESUME -> -: discard;
+        ASP_MTP3_STATUS -> -: discard)
+   "
+}
+
+function f_dec_MTP_to_UnhandledProtocol(in ASP_MTP3_TRANSFERind pl_in, out UnhandledProtocol pl_out) return integer
+{
+  pl_out := 1;
+  return 0;
+} with {extension "prototype(backtrack)" }
+
+#endif
+*/
+
+function f_enc_SCCP_to_MTP
+ (in  ASP_MTP3_TRANSFERreq_sccp pl_in, 
+  out ASP_MTP3_TRANSFERreq pl_out) return integer
+{
+  var bitstring vl_sio_bit := oct2bit(pl_in.sio);
+  var MTP3_Field_sio vl_sio_struct;
+  vl_sio_struct.ni := substr(vl_sio_bit,0,2);
+  vl_sio_struct.prio := substr(vl_sio_bit,2,2);
+  vl_sio_struct.si := substr(vl_sio_bit,4,4);
+
+  pl_out :=
+  {
+    sio := vl_sio_struct,
+    opc := pl_in.opc,
+    dpc := pl_in.dpc,
+    sls := pl_in.sls,
+    data:= enc_PDU_SCCP(pl_in.data)
+  }
+  return 0;
+} with {extension "prototype(backtrack)" }
+
+function f_dec_MTP_to_SCCP
+ (in  ASP_MTP3_TRANSFERind pl_in, 
+  out PDU_SCCP pl_out) return integer
+{
+  if (pl_in.sio.si != '0011'B)
+  {
+    log("The received message is not SCCP. Ignored.");
+    return 1;
+  }
+  pl_out := dec_PDU_SCCP(pl_in.data);
+
+  return 0;
+} with {extension "prototype(backtrack)" }
+
+
+
+}
diff --git a/SCCP_CNL113341/src/SCCP_Types.ttcn b/SCCP_CNL113341/src/SCCP_Types.ttcn
new file mode 100644
index 0000000..168c317
--- /dev/null
+++ b/SCCP_CNL113341/src/SCCP_Types.ttcn
@@ -0,0 +1,1553 @@
+////////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2008                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//  File:         SCCP_Types.ttcn
+//  Description:  SS7 SCCP definitions according to specification
+//                 ITU-T SS7 SCCP, ANSI ..., ttc ..., mpt
+//  Reference:    ITU-T: Recommendation Q.711-Q.714 (07/96)
+//                ANSI:  T1.112-2001
+//                ttc:   JT-Q711 -JT-Q714 (ver 2, 04/97)
+//  Rev:          R6A05
+//  Prodnr:       CNL 113 341
+//  Updated:      2008-05-08
+//  Contact:      http://ttcn.ericsson.se
+
+module SCCP_Types.objid { itu_t(0) identified_organization (4) etsi(0)
+  reserved(127) etsi_identified_organization(0) ericsson(5)
+  testing (0) generic(0) sccp(1) v3(3) typeDefinitions(2) patchNo(3)}
+
+{//start of the module
+
+modulepar
+{//startparameters
+
+//------------------Protocol Timer Values----------------------------------
+
+//Waiting for connection confirm message  -1 to 2 minutes
+
+  float      tspc_timer_T_conn_est:=120.0;
+
+  //Delay to send a message on a conn IT on a
+  //connection section when there are no
+  //messages to send
+  //5 to 10 minutes
+
+  float       tspc_timer_T_ias:=600.0;
+  //Waiting to receive a message on a connection
+  //section
+  //11 to 21 minutes
+  float       tspc_timer_T_iar:=1260.0;
+  //Waiting for release complete message -10 to 20 seconds
+
+  float       tspc_timer_T_rel:=20.0;
+  //Waiting for release complete message; or to
+  //repeat sending released message after the
+  //initial T(rel) expiry
+  //10 to 20 seconds
+  float       tspc_timer_T_repeat_rel:=20.0;
+
+  //Waiting for release complete message; or to
+  //release connection resources, freeze the LRN
+  //and alert a maintenance function after the
+  //initial T(rel) expiry
+  //extending to 1 minute
+  float       tspc_timer_T_int:=60.0;
+
+  //Waiting to resume normal procedure for
+  //temporary connection sections during the
+  //restart procedure
+  //23 to 25 minutes
+ 	float       tspc_timer_T_guard:=1500.0;
+
+  //Waiting to release temporary connection
+  //section or alert maintenance function after
+  //reset request message is sent
+  //10 to 20 seconds
+	float       tspc_timer_T_reset:=20.0;
+  //Waiting to receive all the segments of the
+  //remaining segments single segmented
+  //message after receiving the first segment
+  //10 to 20 seconds
+
+  //  float       tspc_timer_T_reasssembly;
+
+	float       tspc_timer_T_internal_reset:=0.0;
+  //zero-only for sending internal signals!!
+
+
+	float       tspc_timer_guard :=120.0
+  //the same as tspc_timer_T_conn_est:1 or 2 minutes
+
+}//end parameters
+
+
+
+import from General_Types    all;
+import from MTP3asp_Types    all;
+//import from MTP3asp_PortType all;
+
+import from SCCPasp_Types  all;
+
+external function enc_PDU_SCCP( in PDU_SCCP pdu) return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+external function dec_PDU_SCCP( in octetstring o) return PDU_SCCP
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+// Address encoder/decoder for itu:
+external function enc_PDU_SCCP_Address_itu( in SCCP_param_CPartyAddress_itu pdu) return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+external function dec_PDU_SCCP_Address_itu( in octetstring o) return SCCP_param_CPartyAddress_itu
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+// Address encoder/decoder for ansi:
+external function enc_PDU_SCCP_Address_ansi( in SCCP_param_CPartyAddress_ansi pdu) return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+external function dec_PDU_SCCP_Address_ansi( in octetstring o) return SCCP_param_CPartyAddress_ansi
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+// Address encoder/decoder for ttc:
+external function enc_PDU_SCCP_Address_ttc( in SCCP_param_CPartyAddress_ttc pdu) return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+external function dec_PDU_SCCP_Address_ttc( in octetstring o) return SCCP_param_CPartyAddress_ttc
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+// Address encoder/decoder for mpt:
+external function enc_PDU_SCCP_Address_mpt( in SCCP_param_CPartyAddress_mpt pdu) return octetstring
+  with { extension "prototype(convert)"
+         extension "encode(RAW)"
+       };
+external function dec_PDU_SCCP_Address_mpt( in octetstring o) return SCCP_param_CPartyAddress_mpt
+  with { extension "prototype(convert)"
+         extension "decode(RAW)"
+       };
+
+group Types
+{
+	group FieldDefinitions
+	{
+	//---------------------------------------------------------------------------
+	// Field Parameter Name (ITU:$3/Q713 $3, ANSI:Table 2/T1.112.3-2001
+	//---------------------------------------------------------------------------
+		type integer SCCP_field_ParameterName with { variant "FIELDLENGTH(8)"};
+    const SCCP_field_ParameterName con_SCCP_eop :=0,      con_SCCP_dLocRef:=1,
+                                   con_SCCP_sLocRef:=2,   con_SCCP_cdPA:=3,
+                                   con_SCCP_cgPA:=4,      con_SCCP_protclass:=5,
+                                   con_SCCP_segmReas:=6,  con_SCCP_recSeqNum:=7,
+                                   con_SCCP_seqSegm:=8,   con_SCCP_credit:=9,
+                                   con_SCCP_relCause:=10, con_SCCP_retCause:=11,
+                                   con_SCCP_resCause:=12, con_SCCP_errorCause:=13,
+                                   con_SCCP_refCause:=14, con_SCCP_data:=15,
+                                   con_SCCP_segm:=16,     con_SCCP_hopCount:=17,
+                                   con_SCCP_imp:=18,      con_SCCP_longData:=19,
+                                   con_SCCP_mti:=248,     con_SCCP_ins:=249,
+                                   con_SCCP_isni:=250;
+
+
+     //EOP End of optional parameters,      DLocRef Destination local reference,
+     //SLocRef Source local reference,      CdPA Called party address,
+     //CgPA Calling party address,          ProtClass Protocol class,
+     //SegmReas Segmenting/reassembling,    RecSeqNum Receive sequence number,
+     //SeqSegm Sequencing/segmenting,       Credit Credit,
+     //RelCause Release cause,              RetCau Return cause,
+     //ResCau Reset cause,                  ErrCau Error cause,
+     //RefCau Refusal cause,                Data Data,
+     //SEGM Segmentation,                   HopCount Hop counter,
+     //IMP Importance,                      LongData Long data,
+     // --- only in ANSI:---
+     //MTI Message Type Interworking
+     //INS
+     //ISNI
+     //ISNI
+
+	//---------------------------------------------------------------------------
+	// Field Address Indicator (ITU: Q713 $3.4.1, ANSI: T1.112.3 $3.4.1)
+	//---------------------------------------------------------------------------
+	type record  SCCP_field_AddressIndicator_itu
+  {
+    BIT1          pointCodeIndic,
+    BIT1          ssnIndicator,
+    BIT4          globalTitleIndic,
+    BIT1          routingIndicator,
+    BIT1          reserved
+  }
+  with { variant "" }
+
+  // field order is interesting at coding/decoding
+  type record  SCCP_field_AddressIndicator_ansi
+  {
+    BIT1          ssnIndicator,
+    BIT1          pointCodeIndic,
+    BIT4          globalTitleIndic,
+    BIT1          routingIndicator,
+    BIT1          reserved
+  }
+  with { variant "" }
+
+	//---------------------------------------------------------------------------
+	// Subfield Signalling Point Code (Q713 $3.4.2.1)
+	//---------------------------------------------------------------------------
+	// use functions SCCP_getSPC and SCCP_setSPC to handle it!!!
+
+  type BIT16 SCCP_field_SignallingPointCode_itu; // TO BE DEFINED: msb or lsb ???
+  type BIT24 SCCP_field_SignallingPointCode_ansi; // TO BE DEFINED: msb or lsb ???
+  type BIT16 SCCP_field_SignallingPointCode_ttc; // TO BE DEFINED: msb or lsb ???
+  type BIT24 SCCP_field_SignallingPointCode_mpt; // TO BE DEFINED: msb or lsb ???
+  //---------------------------------------------------------------------------
+	// Subfield Subsystem Number (Q713 $3.4.2.2)
+	//---------------------------------------------------------------------------
+	//values declared in SCCPConstants in SCCP.ttcn
+
+	type integer    SCCP_field_SubsystemNumber
+    with { variant "FIELDLENGTH(8)" };
+
+
+	//---------------------------------------------------------------------------
+	// Subfield Global Title (ITU: Q713 $3.4.2.3, ANSI T1.112.3 $3.4.2.3
+	//---------------------------------------------------------------------------
+
+	//---------------------------------------------------------------------------
+	// Subfield Global Title, Nature of address only
+  //ITU: GTI=0001, Q713 $3.4.2.3.1
+  //ANSI: -
+
+	type record  SCCP_field_GlobalTitle_NoA
+  {
+    BIT7          natureOfAddress,
+    BIT1          oddeven,
+    hexstring     globalTitleAddress
+    //it should be hexstring, number digits are in BCD;
+    //hexstring is already supported yet by ETH compiler
+  }
+  with { variant "" }
+
+
+	//---------------------------------------------------------------------------
+	// Global Title, Translation type only (
+  // ITU:   GTI=0010, Q713 $3.4.2.3.2
+  // ANSI:  GTI=0010, Figure6A/T1.112.3
+
+  type record  SCCP_field_GlobalTitle_TT
+  {
+    OCT1          translationType,
+    hexstring     globalTitleAddress
+  }
+   with { variant "" }
+
+
+	//---------------------------------------------------------------------------
+	// Global Title, Translation type & numbering plan & encoding scheme
+	// ITU: GTI=0011, Q713 $3.4.2.3.3)
+  // ANSI GTI=0001, Figure6/T1.112.3
+
+  type record  SCCP_field_GlobalTitle_TT_NP_ES
+  {
+    OCT1          translationType,
+    BIT4          encodingScheme,
+    BIT4          numberingPlan,
+    hexstring     globalTitleAddress
+  }
+  with { variant "" }
+
+
+  //-----------------------------------------------------------------------------
+  // Global Title, Translation type & numbering plan & encoding scheme & nature of
+  // address
+  // GTI=0100, Q713 $3.4.2.3.4)
+  // ANSI: -
+
+  // Suggested to change name to SCCP_field_GlobalTitle_TT_NP_ES_NoA
+
+  type record  SCCP_field_SignallingPointCode_TT_NP_ES_NoA
+  {
+    OCT1          translationType,
+    BIT4          encodingScheme,
+    BIT4          numberingPlan,
+    BIT7          natureOfAddress,
+    BIT1          reserved,
+    hexstring     globalTitleAddress
+  }
+  with { variant "" }
+
+
+  type union  SCCP_field_GlobalTitle_itu
+  {
+    SCCP_field_GlobalTitle_NoA                    gti0001,
+    SCCP_field_GlobalTitle_TT                     gti0010,
+    SCCP_field_GlobalTitle_TT_NP_ES               gti0011,
+    SCCP_field_SignallingPointCode_TT_NP_ES_NoA   gti0100
+  }
+  with { variant "" }
+   // no TAG is added as alternatives depend on the gti field of the address indicator
+
+  type union  SCCP_field_GlobalTitle_ansi
+  {
+    SCCP_field_GlobalTitle_TT_NP_ES               gti0001,
+    SCCP_field_GlobalTitle_TT                     gti0010
+  }
+  with { variant "" }
+
+//---------------------------------------------------------------------------
+// Field Protocol Class (Q713 $3.6)
+//---------------------------------------------------------------------------
+//type enumerated SCCP_field_ProtocolClass
+//  { class0 (0), class1(1), class2(2), class3(3) }
+//   with { variant "FIELDLENGTH(4)" }
+//ethgry(2002-08-01): replaced by BIT4
+
+//---------------------------------------------------------------------------
+// Field Importance (Q713 $3.19)
+//---------------------------------------------------------------------------
+  type integer SCCP_field_Importance
+  with { variant "FIELDLENGTH(3)" }
+
+
+}//endgroup FieldDefinitions
+
+
+group ParameterDefinitions
+{
+  //---------------------------------------------------------------------------
+  // Parameter Message Type (Q713 $2.1)
+  //---------------------------------------------------------------------------
+  type integer SCCP_param_MessageType with { variant "FIELDLENGTH(8)" }
+  const SCCP_param_MessageType cr:=1,      cc:=2,      cref:=3,
+                               rlsd:=4,    rlc:=5,    dt1:=6,    dt2:=7,
+                               ak:=8,      udt:=9,    udts:=10,  ed:=11,
+                               ea:=12,     rsr:=13,   rsc:=14,   err:=15,
+                               it:=16,     xudt:=17,  xudts:=18, ludt:=19,
+                               ludts:=20;
+
+
+   //CR Connection request,    CC Connection confirm,    CREF Connection refused,
+   //RLSD Released,            RLC Release complete,     DT1 Data form 1,
+   //DT2 Data form 2,          AK Data acknowledgement,  UDT Unitdata,
+   //UDTS Unitdata service,    ED Expedited data,        EA Expedited data acknowledgement,
+   //RSR Reset request,        RSC Reset confirm,        ERR Protocol data unit error,
+   //IT Inactivity test,       XUDT Extended unitdata,   XUDTS Extended unitdata service,
+   //LUDT Long unitdata,       LUDTS Long unitdata service
+
+
+  //---------------------------------------------------------------------------
+  // End of Optional Parameters (Q713 $3.1)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_EndOfOptionalParams
+  {
+    SCCP_field_ParameterName             paramName (con_SCCP_eop)
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Destination Local Reference (Q713 $3.2)
+  //---------------------------------------------------------------------------
+  type octetstring SCCP_param_DestLocalReference
+  with { variant "FIELDLENGTH(3)"}
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Source Local Reference (Q713 $3.3)
+  //---------------------------------------------------------------------------
+
+  type octetstring SCCP_param_SourceLocalReference
+  with { variant "FIELDLENGTH(3)" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Called/Calling Party Address (Q713 $3.4/$3.5)
+  //---------------------------------------------------------------------------
+  /* Removed 2004.02.16 by ethbaat:
+
+  type union SCCP_superfield_SignallingPointCode_itu
+  {
+    SCCP_field_SignallingPointCode_itu   present,
+    Dummy                                absent
+  } with { variant "" }
+
+
+  type union SCCP_superfield_SignallingPointCode_ansi
+  {
+    SCCP_field_SignallingPointCode_ansi   present,
+    Dummy                                 absent
+  } with { variant "" }
+
+  type union SCCP_superfield_SignallingPointCode_ttc
+  {
+    SCCP_field_SignallingPointCode_ttc   present,
+    Dummy                                absent
+  } with { variant "" }
+
+  type union SCCP_superfield_SubsystemNumber
+  {
+    SCCP_field_SubsystemNumber        present,
+    Dummy                            absent
+  } with { variant "" }
+
+ */
+
+  // Standard Independent Encoded Calling/Called Party Address:
+  // used in SCCP.ttcn/Convert
+
+  // this address is used everywhere in SCCP inside:
+  type octetstring SCCP_CPartyAddressEnc_addr with { variant ""};
+
+  type record SCCP_param_CPartyAddressEnc
+  {
+    LIN1                           paramLength,
+    SCCP_CPartyAddressEnc_addr     addr
+  } with { variant (paramLength) "LENGTHTO( addr )"}
+
+  // Structured, decoded versions:
+
+  type record SCCP_param_CPartyAddress_itu {
+
+    SCCP_field_AddressIndicator_itu         addressIndicator,
+    SCCP_field_SignallingPointCode_itu      signPointCode   optional,
+    SCCP_field_SubsystemNumber              subsystemNumber optional,
+    SCCP_field_GlobalTitle_itu              globalTitle     optional
+  }
+  with { variant  (signPointCode)   "PRESENCE( addressIndicator.pointCodeIndic = '1'B)";
+         variant (subsystemNumber)  "PRESENCE( addressIndicator.ssnIndicator   = '1'B)";
+         variant (globalTitle)      "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B,
+                                                addressIndicator.globalTitleIndic = '0010'B,
+                                                addressIndicator.globalTitleIndic = '0011'B,
+                                                addressIndicator.globalTitleIndic = '0100'B}),
+                                    CROSSTAG(
+                                    gti0001, addressIndicator.globalTitleIndic = '0001'B;
+                                    gti0010, addressIndicator.globalTitleIndic = '0010'B;
+                                    gti0011, addressIndicator.globalTitleIndic = '0011'B;
+                                    gti0100, addressIndicator.globalTitleIndic = '0100'B)"
+        }
+
+  type record SCCP_param_CPartyAddress_ansi
+  {
+    SCCP_field_AddressIndicator_ansi     addressIndicator,
+    SCCP_field_SubsystemNumber           subsystemNumber  optional,
+    SCCP_field_SignallingPointCode_ansi  signPointCode    optional,
+    SCCP_field_GlobalTitle_ansi          globalTitle      optional
+  }
+  with {
+            variant (subsystemNumber) "PRESENCE( addressIndicator.ssnIndicator = '1'B )";
+            variant (signPointCode)   "PRESENCE( addressIndicator.pointCodeIndic = '1'B )";
+            variant (globalTitle)     "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B,
+                                                  addressIndicator.globalTitleIndic = '0010'B}),
+                                      CROSSTAG(
+                                      gti0001, addressIndicator.globalTitleIndic = '0001'B;
+                                      gti0010, addressIndicator.globalTitleIndic = '0010'B)"
+       }
+
+  type record SCCP_param_CPartyAddress_ttc {
+
+    SCCP_field_AddressIndicator_itu         addressIndicator,
+    SCCP_field_SignallingPointCode_ttc      signPointCode     optional,
+    SCCP_field_SubsystemNumber              subsystemNumber   optional,
+    SCCP_field_GlobalTitle_itu              globalTitle       optional
+  }
+  with {  variant (signPointCode)    "PRESENCE( addressIndicator.pointCodeIndic = '1'B)";
+          variant (subsystemNumber)  "PRESENCE( addressIndicator.ssnIndicator   = '1'B)";
+          variant (globalTitle)      "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B,
+                                                 addressIndicator.globalTitleIndic  = '0010'B,
+                                                 addressIndicator.globalTitleIndic  = '0011'B,
+                                                 addressIndicator.globalTitleIndic  = '0100'B}),
+                                     CROSSTAG(
+                                     gti0001, addressIndicator.globalTitleIndic = '0001'B;
+                                     gti0010, addressIndicator.globalTitleIndic = '0010'B;
+                                     gti0011, addressIndicator.globalTitleIndic = '0011'B;
+                                     gti0100, addressIndicator.globalTitleIndic = '0100'B)"
+        }
+
+  type record SCCP_param_CPartyAddress_mpt {
+
+    SCCP_field_AddressIndicator_itu         addressIndicator,
+    SCCP_field_SignallingPointCode_mpt      signPointCode     optional,
+    SCCP_field_SubsystemNumber              subsystemNumber   optional,
+    SCCP_field_GlobalTitle_itu              globalTitle       optional
+  }
+  with {  variant (signPointCode)    "PRESENCE( addressIndicator.pointCodeIndic = '1'B)";
+          variant (subsystemNumber)  "PRESENCE( addressIndicator.ssnIndicator   = '1'B)";
+          variant (globalTitle)      "PRESENCE( {addressIndicator.globalTitleIndic = '0001'B,
+                                                 addressIndicator.globalTitleIndic  = '0010'B,
+                                                 addressIndicator.globalTitleIndic  = '0011'B,
+                                                 addressIndicator.globalTitleIndic  = '0100'B}),
+                                     CROSSTAG(
+                                     gti0001, addressIndicator.globalTitleIndic = '0001'B;
+                                     gti0010, addressIndicator.globalTitleIndic = '0010'B;
+                                     gti0011, addressIndicator.globalTitleIndic = '0011'B;
+                                     gti0100, addressIndicator.globalTitleIndic = '0100'B)"
+        }
+
+//  type record SCCP_param_CPartyAddress_opt_itu
+  type record SCCP_param_CPartyAddressEnc_opt
+  {
+    SCCP_field_ParameterName        paramName(con_SCCP_cdPA, con_SCCP_cgPA),
+    LIN1                            paramLength,
+    SCCP_CPartyAddressEnc_addr      addr
+  } with { variant (paramLength) "LENGTHTO( addr )"}
+
+  //---------------------------------------------------------------------------
+  // Parameter Protocol Class (Q713 $3.6)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_ProtocolClass
+  {
+    BIT4                             class,
+    BIT4                             messageHandling
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Segmenting/reassembling (Q713 $3.7)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_SegmentingReassembl
+  {
+    BIT1                             more,
+    BIT7                             reserved
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Receive Sequence Number (Q713 $3.8)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_RecSeqNumber
+  {
+    BIT1                             reserved,
+    BIT7                             pr
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Sequencing/Segmenting (Q713 $3.9)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_SequencingSegmenting
+  {
+    BIT1                             reserved,
+    BIT7                             p_s,
+    BIT1                             more,
+    BIT7                             pr
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Credit(Q713 $3.10)
+  //---------------------------------------------------------------------------
+  type octetstring SCCP_param_Credit
+  with { variant "FIELDLENGTH(1)" }//ethlel0813
+
+
+  type record SCCP_param_Credit_opt
+  {
+    SCCP_field_ParameterName         paramName(con_SCCP_credit),
+    LIN1                             paramLength, // always 1!
+    OCT1                             credit
+  }
+  with { variant "" }
+
+
+//---------------------------------------------------------------------------
+// Parameter Release Cause(Q713 $3.11)
+//---------------------------------------------------------------------------
+//type enumerated  SCCP_param_ReleaseCause
+//  { endUserOrig(0),     endUserCong(1),      endUserFailure(2),  sCCPUserOrig(3),
+//    remProcError(4),    inconsConnData(5),   accessFailure(6),   accessCongestion(7),
+//    subsystFailure(8),  subsystCongest(9),   mTPFailure(10),     networkCongest(11),
+//    expResetTimer(12),  expRecInacTimer(13), reserved(14),       unqualified(15),
+//    sCCPFailure(16)
+//  }
+//   with { variant "FIELDLENGTH(8)" }
+
+//values declared in SCCPConstants in SCCP.ttcn
+
+  type integer SCCP_param_ReleaseCause
+  with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+//---------------------------------------------------------------------------
+// Parameter Return Cause(Q713 $3.12)
+//---------------------------------------------------------------------------
+//type enumerated  SCCP_param_ReturnCause
+//  { noTransl4AddrNature(0),    noTransl4SpecifAddr(1),    subsystemCongestion(2),
+//    subsystemFailure(3),       unequippedUser(4),         mTPFailure(5),
+//    networkCongestion(6),      unqualified(7),            errorMessageTransport(8),
+//    errorLocalProcessing(9),   destNoReassembly(10),      sCCPFailure(11),
+//    hopCounterViolation(12),   segmeNotSupported(13),     segmentationFailure(14)
+//  }
+//   with { variant "FIELDLENGTH(8)" }
+
+  //values declared in SCCPConstants in SCCP.ttcn
+  type integer SCCP_param_ReturnCause
+  with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+//---------------------------------------------------------------------------
+// Parameter Reset Cause(Q713 $3.13)
+//---------------------------------------------------------------------------
+//type enumerated  SCCP_param_ResetCause
+//  { endUserOriginated(0),               sCCPUserOriginated(1),
+//   messOutOfOrder_incPs(2),            messOutOfOrder_incPr(3),
+//    remProcErr_messOutOfWindow(4),      emProcErr_IncPsAfterReinit(5),
+//    remProcErr_general(6),              remEndUserOperational(7),
+//    networkOperational(8),              accessOperational(9),
+//    networkCongestion(10),              reserved(11),
+//    unqualified(12)
+//  }
+//   with { variant "FIELDLENGTH(8)" }
+
+
+  //values declared in SCCPConstants in SCCP.ttcn
+
+  type integer SCCP_param_ResetCause
+  with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Error Cause(Q713 $3.14)
+  //---------------------------------------------------------------------------
+  //type enumerated  SCCP_param_ErrorCause
+  //  { unassignedDestinationLRN(0),              inconsistentSourceLRN(1),
+  //    pointCodeMismatch(2),                     serviceClassMismatch(3),
+  //    unqualified(4)
+  //  }
+  //   with { variant "FIELDLENGTH(8)" }
+
+  //values declared in SCCPConstants in SCCP.ttcn
+
+  type integer SCCP_param_ErrorCause
+  with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Refusal Cause(Q713 $3.15)
+  //---------------------------------------------------------------------------
+   //type enumerated  SCCP_param_RefusalCause
+   //  { endUserOrigin(0),             endUserConges(1),          endUserFailure(2),
+   //    sCCPUserOrigin(3),            destAddrUnkn(4),           destInaccess(5),
+   //    qOSNotAvail_nonTransient(6),  qOSNotAvail_transient(7),  accessFailure(8),
+   //    accessCongestion(9),          subsystemFailure(10),      subsystemCongest(11),
+   //    expConnEstTimer(12),          incomUserData(13),         reserved(14),
+   //    unqualified(15),              hopCounterViol(16),        sCCPFailure(17),
+   //    noTransl4address(18),         unequippedUser(19)
+   //  }
+   //   with { variant "FIELDLENGTH(8)" }
+
+
+  //values declared in SCCPConstants in SCCP.ttcn
+
+  type integer SCCP_param_RefusalCause
+   with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+  //---------------------------------------------------------------------------
+  // Parameter User data (Q713 $3.16)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_Data
+  {
+   LIN1                             paramLength,
+   OCTN                             data
+  }
+   with { variant (paramLength) "LENGTHTO(data)" }
+
+
+  type record SCCP_param_Data_opt
+  {
+    SCCP_field_ParameterName         paramName(con_SCCP_data),
+    LIN1                             paramLength,
+    OCTN                             data
+  }
+  with { variant (paramLength) "LENGTHTO(data)" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Segmentation (Q713 $3.17)
+  //---------------------------------------------------------------------------
+
+  type record SCCP_param_Segmentation_opt
+  {
+    SCCP_field_ParameterName         paramName(con_SCCP_segm),
+    LIN1                             paramLength,       //always 4!
+    BIT4                             remainingSegment,
+    BIT2                             reserved,
+    BIT1                             class,
+    BIT1                             firstSegm,
+    OCT3                             segmLocalRef
+  }
+  with { variant "" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Hop counter (Q713 $3.18)
+  //---------------------------------------------------------------------------
+  type integer SCCP_param_HopCounter
+  with { variant "FIELDLENGTH(8), COMP(nosign)" };
+
+
+  type record SCCP_param_HopCounter_opt
+  {
+    SCCP_field_ParameterName         paramName(con_SCCP_hopCount),
+    LIN1                             paramLength,           //always 1!
+    SCCP_param_HopCounter            counter
+  }
+  with { variant (paramLength) "LENGTHTO(counter)" }
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Importance (Q713 $3.19)
+  //---------------------------------------------------------------------------
+
+  type record SCCP_param_Importance_opt
+  {
+    SCCP_field_ParameterName         paramName(con_SCCP_imp),
+    LIN1                             paramLength,           //always 1!
+    SCCP_field_Importance            importance,
+    BIT5                             reserved
+  }
+  with { variant ""}
+  //with { variant (paramLength) "LENGTHTO(importance)" } //????
+
+
+  //---------------------------------------------------------------------------
+  // Parameter Long data (Q713 $3.20)
+  //---------------------------------------------------------------------------
+  type record SCCP_param_LongData
+  {
+    LIN2                             paramLength,
+    OCTN                             data
+  }
+  with { variant (paramLength) "LENGTHTO(data)" }
+
+
+  //********************************************************************************
+  // SCCP management parameters (Q713 $5)
+  //********************************************************************************
+
+  //---------------------------------------------------------------------------
+  // SCMG format identifier (Q713 $5.1)
+  //---------------------------------------------------------------------------
+  type enumerated SCMG_param_FormatId
+  {
+    sSAallowed(1),               // SSA subsystem-allowed
+    sSPprohib(2),                // SSP subsystem-prohibited
+    sSTstaTest(3),               // SST subsystem-status-test
+    sORoutReq(4),                // SOR subsystem-out-of-service-request
+    sORoutGrant (5),             // SOG subsystem-out-of-service-grant
+    sSCcongest(6)                // SSC SCCP/subsystem-congested
+  }
+  with { variant "FIELDLENGTH(8)" }
+
+
+  //---------------------------------------------------------------------------
+  // Affected SSN (Q713 $5.2.1)
+  //---------------------------------------------------------------------------
+  /* not supported yet:
+  type SCCP_field_SubsystemNumber SCMG_param_AffectedSSN
+  with { variant "" }
+  */
+
+  //---------------------------------------------------------------------------
+  // Affected Pointcode (Q713 $5.2.2)
+  //---------------------------------------------------------------------------
+  /* not supported yet:
+  type SCCP_field_SignallingPointCode SCMG_param_AffectedPointCode
+  with { variant "" }
+  */
+
+  //---------------------------------------------------------------------------
+  // Subsystem Multiplicity Indicator (Q713 $5.2.3)
+  //---------------------------------------------------------------------------
+  /* not supported yet:
+  type record SCMG_param_MultiplIndicator
+  {
+    BIT2          smi,
+    BIT6          reserved
+  }
+  with { variant "" }
+  */
+
+  //---------------------------------------------------------------------------
+  // SCCP congestion level (Q713 $5.2.4)
+  //---------------------------------------------------------------------------
+  /* not supported yet:
+  type record SCMG_param_CongestionLevel
+  {
+    BIT4          congLevel,
+    BIT4          reserved
+  }
+  with { variant "" }
+  */
+
+}//endgroup ParameterDefinitions
+
+
+group PDUDefinitions
+{
+  //********************************************************************************
+  // Message Connection Request (CR) (Q713 $4.2)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  type set  SCCP_ConnReq_optionalPart
+  {
+    SCCP_param_Credit_opt                  credit           optional,
+    SCCP_param_CPartyAddressEnc_opt        callingPAddress  optional,
+    SCCP_param_Data_opt                    data             optional,
+    SCCP_param_HopCounter_opt              hopCounter       optional,
+    SCCP_param_Importance_opt              importance       optional
+  }
+  with { variant "TAG ( credit,           paramName= con_SCCP_credit;
+                        callingPAddress,  paramName= con_SCCP_cgPA;
+                        data,             paramName= con_SCCP_data;
+                        hopCounter,       paramName= con_SCCP_hopCount;
+                        importance ,      paramName= con_SCCP_imp)"
+       }
+
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ConnectionRequest
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_SourceLocalReference      sourceLocRef,
+    SCCP_param_ProtocolClass             protClass,
+    LIN1                                 pointer1,    //will be 2
+    LIN1                                 pointer2,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_ConnReq_optionalPart            optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with { variant (pointer1) "POINTERTO(calledPAddress)";
+         variant (pointer2) "POINTERTO(optionalPart)";
+         variant "TAG (eop,paramName=con_SCCP_eop )"
+            //Note, that optional part itself is mandatory but it may be empty!
+       }
+
+
+  //********************************************************************************
+  // Message Connection Confirm (CC) (Q713 $4.3)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  type set  SCCP_ConnConfirm_optionalPart
+  {
+   SCCP_param_Credit_opt                  credit           optional,
+   SCCP_param_CPartyAddressEnc_opt        calledPAddress   optional,
+   SCCP_param_Data_opt                    data             optional,
+   SCCP_param_Importance_opt              importance       optional
+  }
+  with { variant "TAG ( credit,           paramName= con_SCCP_credit;
+                        calledPAddress,   paramName= con_SCCP_cdPA;
+                        data,             paramName= con_SCCP_data;
+                        importance,       paramName= con_SCCP_imp)"
+        }
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ConnectionConfirm
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef,
+    SCCP_param_ProtocolClass             protClass,
+    LIN1                                 pointer1,
+    SCCP_ConnConfirm_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with { variant (pointer1) "POINTERTO(optionalPart)";
+           variant "TAG (eop,paramName=con_SCCP_eop )"}
+
+
+  //********************************************************************************
+  // Message Connection Refused (CREF) (Q713 $4.4)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  type set  SCCP_ConnRefused_optionalPart
+  {
+    SCCP_param_CPartyAddressEnc_opt        calledPAddress   optional,
+    SCCP_param_Data_opt                    data             optional,
+    SCCP_param_Importance_opt              importance       optional
+  }
+  with { variant "TAG (calledPAddress,    paramName= con_SCCP_cdPA;
+                        data,             paramName= con_SCCP_data;
+                        importance,       paramName= con_SCCP_imp)"
+       }
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ConnectionRefused
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_RefusalCause              refusalCause,
+    LIN1                                 pointer1,
+    SCCP_ConnRefused_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with { variant (pointer1) "POINTERTO(optionalPart)";
+         variant "TAG (eop,paramName=con_SCCP_eop )"}
+
+
+  //********************************************************************************
+  // Message Released (RLSD) (Q713 $4.5)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  type set  SCCP_Released_optionalPart
+  {
+    SCCP_param_Data_opt                    data             optional,
+    SCCP_param_Importance_opt              importance       optional
+  }
+  with { variant "TAG (data,       paramName= con_SCCP_data;
+                       importance, paramName= con_SCCP_imp)"
+       }
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_Released
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef,
+    SCCP_param_ReleaseCause              releaseCause,
+    LIN1                                 pointer1,
+    SCCP_Released_optionalPart           optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with { variant (pointer1) "POINTERTO(optionalPart)";
+         variant "TAG (eop,paramName=con_SCCP_eop )" }
+
+
+  //********************************************************************************
+  // Message Release Complete (RLC) (Q713 $4.6)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ReleaseComplete
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Data form 1 (DT1) (Q713 $4.7)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_DataForm1
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SegmentingReassembl       segmentingReassembl,
+    LIN1                                 pointer1,            //always 1!
+    SCCP_param_Data                      data
+  }
+  with { variant (pointer1) "POINTERTO(data)"; }
+
+
+  //********************************************************************************
+  // Message Data form 2 (DT2) (Q713 $4.8)
+  //********************************************************************************
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_DataForm2
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SequencingSegmenting      sequencingSegmenting,
+    LIN1                                 pointer1,              //always 1!
+    SCCP_param_Data                      data
+  }
+  with { variant (pointer1) "POINTERTO(data)"; }
+
+
+  //********************************************************************************
+  // Message Data Acknowledgement (AK) (Q713 $4.9)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_DataAcknowledgement
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_RecSeqNumber              recSeqNumber,
+    SCCP_param_Credit                    credit
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Unitdata (UDT) (Q713 $4.10)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_Unitdata
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ProtocolClass             protClass,
+    LIN1                                 pointer1,       //will be 3
+    LIN1                                 pointer2,
+    LIN1                                 pointer3,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_Data                      data
+  }
+  with {  variant (pointer1) "POINTERTO(calledPAddress)";
+          variant (pointer2) "POINTERTO(callingPAddress)";
+          variant (pointer3) "POINTERTO(data)"
+       }
+
+
+  //********************************************************************************
+  // Message Unitdata service (UDTS) (Q713 $4.11)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_UnitdataService
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ReturnCause               returnCause,
+    LIN1                                 pointer1,       //will be 3
+    LIN1                                 pointer2,
+    LIN1                                 pointer3,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_Data                      data
+  }
+  with {  variant (pointer1) "POINTERTO(calledPAddress)";
+          variant (pointer2) "POINTERTO(callingPAddress)";
+          variant (pointer3) "POINTERTO(data)"
+       }
+
+
+  //********************************************************************************
+  // Message Expedited Data (ED) (Q713 $4.12)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ExpeditedData
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    LIN1                                 pointer1,              //always 1!
+    SCCP_param_Data                      data
+  }
+  with { variant (pointer1) "POINTERTO(data)" }
+
+
+  //********************************************************************************
+  // Message Expedited Data Acknowledgement (EA) (Q713 $4.13)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ExpeditedDataAck
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Reset Request (RSR) (Q713 $4.14)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ResetRequest
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef,
+    SCCP_param_ResetCause                resetCause
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Reset Confirmation (RSC) (Q713 $4.15)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ResetConfirm
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Protocol data unit error (ERR) (Q713 $4.16)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ProtDataUnitError
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_ErrorCause                errorCause
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Inactivity test (IT) (Q713 $4.17)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_InactivityTest
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_DestLocalReference        destLocRef,
+    SCCP_param_SourceLocalReference      sourceLocRef,
+    SCCP_param_ProtocolClass             protClass,
+    SCCP_param_SequencingSegmenting      sequencingSegmenting,
+    SCCP_param_Credit                    credit
+  }
+  with { variant "" }
+
+
+  //********************************************************************************
+  // Message Extended Unitdata (XUDT) (Q713 $4.18)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  type record  SCCP_ExtUnitdata_optionalPart
+  {
+    SCCP_param_Segmentation_opt            segmentation     optional,
+    SCCP_param_Importance_opt              importance       optional
+  }
+  with { variant "TAG (segmentation,      paramName= con_SCCP_segm;
+                        importance,       paramName= con_SCCP_imp)"
+       }
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ExtUnitdata
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ProtocolClass             protClass,
+    SCCP_param_HopCounter                hopCounter,
+    LIN1                                 pointer1,      //will be 4
+    LIN1                                 pointer2,
+    LIN1                                 pointer3,
+    LIN1                                 pointer4,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_Data                      data,
+    SCCP_ExtUnitdata_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with { variant (pointer1) "POINTERTO(calledPAddress)";
+         variant (pointer2) "POINTERTO(callingPAddress)";
+         variant (pointer3) "POINTERTO(data)";
+         variant (pointer4) "POINTERTO(optionalPart)";
+         variant "TAG (eop, paramName=con_SCCP_eop )"
+       }
+
+
+  //********************************************************************************
+  // Message Extended Unitdata Service(XUDTS) (Q713 $4.19)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  // The same as SCCP_ExtUnitdata_optionalPart
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_ExtUnitdataService
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ReturnCause               returnCause,
+    SCCP_param_HopCounter                hopCounter,
+    LIN1                                 pointer1,      //will be 4
+    LIN1                                 pointer2,
+    LIN1                                 pointer3,
+    LIN1                                 pointer4,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_Data                      data,
+    SCCP_ExtUnitdata_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with {  variant (pointer1) "POINTERTO(calledPAddress)";
+          variant (pointer2) "POINTERTO(callingPAddress)";
+          variant (pointer3) "POINTERTO(data)";
+          variant (pointer4) "POINTERTO(optionalPart)";
+          variant "TAG (eop,paramName=con_SCCP_eop )"
+        }
+
+
+  //********************************************************************************
+  // Message Long Unitdata (LUDT) (Q713 $4.20)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  // The same as SCCP_ExtUnitdata_optionalPart
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_LongUnitdata
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ProtocolClass             protClass,
+    SCCP_param_HopCounter                hopCounter,
+    LIN2                                 pointer1,
+    LIN2                                 pointer2,
+    LIN2                                 pointer3,
+    LIN2                                 pointer4,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_LongData                  longData,
+    SCCP_ExtUnitdata_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+   }
+   with { variant (pointer1) "POINTERTO(calledPAddress)";
+          variant (pointer2) "POINTERTO(callingPAddress)";
+          variant (pointer3) "POINTERTO(longData)";
+          variant (pointer4) "POINTERTO(optionalPart)";
+          variant "TAG (eop,paramName=con_SCCP_eop) "
+        }
+
+
+  //********************************************************************************
+  // Message Long Unitdata Service (LUDTS) (Q713 $4.21)
+  //********************************************************************************
+  //---------------------------------------------------------------------------
+  // Optional part
+  // The same as SCCP_ExtUnitdata_optionalPart
+
+  //---------------------------------------------------------------------------
+  // Message definition
+  //---------------------------------------------------------------------------
+  type record  PDU_SCCP_LongUnitdataService
+  {
+    SCCP_param_MessageType               messageType,
+    SCCP_param_ReturnCause               returnCause,
+    SCCP_param_HopCounter                hopCounter,
+    LIN2                                 pointer1,      //will be 5
+    LIN2                                 pointer2,
+    LIN2                                 pointer3,
+    LIN2                                 pointer4,
+    SCCP_param_CPartyAddressEnc          calledPAddress,
+    SCCP_param_CPartyAddressEnc          callingPAddress,
+    SCCP_param_LongData                  longData,
+    SCCP_ExtUnitdata_optionalPart        optionalPart optional,
+    SCCP_param_EndOfOptionalParams       eop   optional
+  }
+  with {  variant (pointer1) "POINTERTO(calledPAddress)";
+          variant (pointer2) "POINTERTO(callingPAddress)";
+          variant (pointer3) "POINTERTO(longData)";
+          variant (pointer4) "POINTERTO(optionalPart)";
+          variant "TAG (eop,paramName=con_SCCP_eop) "
+       }
+
+
+  //********************************************************************************
+  // SCCP management messages (Q713 $5.3)
+  //********************************************************************************
+  /*type record  PDU_SCMG_message
+  {
+   SCMG_param_FormatId                  messageType,
+   SCMG_param_AffectedSSN               affectedSSN,
+   SCMG_param_AffectedPointCode         affectedPC,
+   SCMG_param_MultiplIndicator          smi,
+   SCMG_param_CongestionLevel           congLevel optional
+      //shall be present in all messages except SSG
+  }
+   with { variant "" }
+  */
+
+  //********************************************************************************
+  // SCCP Top Level PDU (Q713 $4.2)
+  //********************************************************************************
+
+  type union  PDU_SCCP
+  {
+    PDU_SCCP_ConnectionRequest          connrequest,
+    PDU_SCCP_ConnectionRefused          connrefused,
+    PDU_SCCP_Released                   released,
+    PDU_SCCP_ReleaseComplete            relcomp,
+    PDU_SCCP_DataForm1                  dataform1,
+    PDU_SCCP_DataForm2                  dataform2,
+    PDU_SCCP_DataAcknowledgement        dataack,
+    PDU_SCCP_UnitdataService            udataserv,
+    PDU_SCCP_ExpeditedData              expdata,
+    PDU_SCCP_ExpeditedDataAck           expdataack ,
+    PDU_SCCP_ResetRequest               resetreq,
+    PDU_SCCP_ResetConfirm               resconf,
+    PDU_SCCP_ProtDataUnitError          pduerror,
+    PDU_SCCP_InactivityTest             inacttest,
+    PDU_SCCP_ExtUnitdata                extudata,
+    PDU_SCCP_ExtUnitdataService         extudataserv ,
+    PDU_SCCP_LongUnitdata               longudata,
+    PDU_SCCP_LongUnitdataService        longudataserv,
+    PDU_SCCP_Unitdata                   unitdata,
+    PDU_SCCP_ConnectionConfirm          connconfirm
+    // PDU_SCMG_message                    scmg
+  }
+  with { variant "TAG (connrequest,       messageType = cr;
+                       connconfirm,       messageType = cc;
+                       connrefused,       messageType = cref;
+                       released,          messageType = rlsd;
+                       relcomp,           messageType = rlc;
+                       dataform1,         messageType = dt1;
+                       dataform2,         messageType = dt2;
+                       dataack,           messageType = ak;
+                       unitdata,          messageType = udt;
+                       udataserv,         messageType = udts;
+                       expdata,           messageType = ed;
+                       expdataack,        messageType = ea;
+                       resetreq,          messageType = rsr;
+                       resconf,           messageType = rsc;
+                       pduerror,          messageType = err;
+                       inacttest,         messageType = it;
+                       extudata,          messageType = xudt;
+                       extudataserv,      messageType = xudts;
+                       longudata,         messageType = ludt;
+                       longudataserv,     messageType = ludts)"
+       }
+
+}//endgroup PDUDefinitions
+
+}//endgroup Types
+
+
+
+group OtherTypedefinitions
+{//startgroup  OtherTypedefinitions
+
+  // enum replaced with this solution:
+  type integer states;
+  const states
+    idle:=0,
+    connection_pending_OG:=1,
+    connection_pending_IC:=2,
+    active:=3,                 // ==data transfer, see 6.1.1.2.1/Q.711.
+    disconnect_pending:=4,     // ==
+    //reset_OG,- as N_RESET_req and N_RESET_resp will not be received, this state should never occur
+    reset_bothway:=5,
+    reset_IC:=5,
+    //frozen_reference,
+    wait_conn_confirm:=6;
+
+  type record sccp_buffer
+  {
+    octetstring buffer,
+    integer     actlen,
+    integer     maxlen
+  }
+
+  // === Connection Oriented Data: ===
+
+  // record holding all data of a connection
+  type record       ConnectionData
+  {
+    OCT3        localReference, //segmLocReference????,
+    OCT3        remoteReference, //segmRemoteRef????,
+    states      state,
+    integer     connectionId,
+    //integer     max_len, //maximal length of input buffer
+    sccp_buffer reassembler_buffer // data collected here before sending up to the User
+  }
+
+  // === Connectionless Data: =======================
+  // == sending:==
+  // Segmentation Local Reference
+  type integer segmLocRef_states;
+  const segmLocRef_states segmLocRef_idle :=0, segmLocRef_busy:=1;
+
+  type record segmLocRef
+  {
+    OCT3              val,
+    segmLocRef_states state
+  }
+
+  // == receiving: ==
+  type record ClessRcvBuff
+  {
+    //OCT3        segmLocalRef,  // not used ??
+    OCT3                   segmRemoteRef,
+    segmLocRef_states      state,
+    sccp_buffer            reassembler_buffer
+  }
+
+  type charstring SCCP_ServiceType;
+
+  const charstring mtp3_itu  := "mtp3_itu";  // SCCP_itu
+  const charstring mtp3_ansi := "mtp3_ansi"; //SCCP_ansi
+  const charstring mtp3_ttc  := "mtp3_ttc";   //SCCP_ttc
+  const charstring mtp3b_itu := "mtp3b_itu";
+  const charstring mtp3b_ansi:= "mtp3b_ansi";
+  const charstring mtp3b_ttc := "mtp3b_ttc";
+  const charstring m3ua      := "m3ua";
+  const charstring mtp3_mpt  := "mtp3_mpt";
+
+  type record MSC_SCCP_MTP3_parameters
+  {
+    MTP3_Field_sio   sio,
+    integer          opc,
+    integer          dpc,
+    integer          sls,
+    SCCP_ServiceType sccp_serviceType,
+    integer          ssn optional    //This should be set if you want only one
+  }                                  //active subsystem on the link.
+
+}//endgroup OtherTypedefinitions
+
+group MessageTypes
+{
+    // *************************************************************************
+    // *  ASP_sccp type definitions                                                 *
+    // *************************************************************************
+
+
+  //       type record ASP_MTP3_TRANSFERind_sccp
+  //        {
+  //         octetstring       sio length(1),  // see values in Q.704 $14.2.1
+  //         integer           opc,
+  //         integer           dpc,
+  //         integer           sls,
+  //         PDU_SCCP          data
+  //        }
+
+
+  type record ASP_MTP3_TRANSFERreq_sccp
+  {
+    octetstring       sio length(1),  // see values in Q.704 $14.2.1
+    integer           opc,
+    integer           dpc,
+    integer           sls,
+    PDU_SCCP          data
+  }
+
+}//end group Messagetypes
+
+group ASPTemplates
+{
+
+// *************************************************************************
+// *  ASP template definitions   sending
+// *************************************************************************
+
+//  template ASP_MTP3_TRANSFERind_sccp t_ASP_MTP3_TRANSFERind_sccp
+//  (
+//
+//   octetstring  pl_sio,
+//   integer      pl_opc,
+//   integer      pl_dpc,
+//   integer      pl_sls,
+//   template PDU_SCCP  pl_data) :=
+//      {
+//       sio  :=                              pl_sio,
+//        opc  :=                              pl_opc,
+//        dpc  :=                              pl_dpc,
+//        sls  :=                              pl_sls,
+//        data :=                              pl_data
+//       }
+
+
+  template ASP_MTP3_TRANSFERreq_sccp t_ASP_MTP3_TRANSFERreq_sccp
+  (
+
+    octetstring           pl_sio,
+    integer               pl_opc,
+    integer               pl_dpc,
+    integer               pl_sls,
+    template PDU_SCCP     pl_data
+    ) :=
+      {
+        sio  :=  pl_sio,
+        opc  :=  pl_opc,
+        dpc  :=  pl_dpc,
+        sls  :=  pl_sls,
+        data :=  pl_data
+      }
+
+
+// *************************************************************************
+// *  ASP template definitions   receiving                                            *
+// *************************************************************************
+
+
+//template ASP_MTP3_TRANSFERind_sccp tr_ASP_MTP3_TRANSFERind_sccp
+// (
+//
+//   PDU_SCCP  pl_data) :=
+//       {
+//        sio  :=                              ?,
+//        opc  :=                              ?,
+//        dpc  :=                              ?,
+//        sls  :=                              ?,
+//        data :=                              pl_data
+//       }
+
+
+  template ASP_MTP3_TRANSFERreq_sccp tr_ASP_MTP3_TRANSFERreq_sccp
+  //  (
+
+  //  PDU_SCCP    pl_data)
+  :=
+      {
+        sio  :=                              ?,
+        opc  :=                              ?,
+        dpc  :=                              ?,
+        sls  :=                              ?,
+        data :=                              ?  //pl_data
+       }
+
+
+
+
+
+
+}//endgroup ASPTemplates
+
+
+} with { encode "RAW" } // end module
diff --git a/SCCP_CNL113341/src/SCCPasp_Types.ttcn b/SCCP_CNL113341/src/SCCPasp_Types.ttcn
new file mode 100644
index 0000000..c66fa86
--- /dev/null
+++ b/SCCP_CNL113341/src/SCCPasp_Types.ttcn
@@ -0,0 +1,895 @@
+///////////////////////////////////////////////////////////////////////////////
+//                                                                           //
+// Copyright Test Competence Center (TCC) ETH 2006                           //
+//                                                                           //
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied          //
+//                                                                           //
+///////////////////////////////////////////////////////////////////////////////
+//  File:         SCCPasp_Types.ttcn
+//  Description:  SS7 SCCP definitions according to specification
+//                 ITU-T SS7 SCCP, ANSI ..., TCC ...
+//  References:   ITU-T: Recommendation Q.711-Q.714,
+//                ANSI:  T1.112-2001,
+//                TCC:   JT-Q711 - JT-Q714
+//  Rev:          R6A05
+//  Prodnr:       CNL 113 341
+//  Updated:      2006-01-26
+//  Contact:      http://ttcn.ericsson.se
+
+module SCCPasp_Types.objid
+{
+    itu_t(0) identified_organization (4) etsi(0) reserved(127)
+    etsi_identified_organization(0) ericsson(5) testing (0)
+    generic(0) sccp(1) v96(3) aspDefinitions(3) patchNo(0)
+}
+
+
+{//startmodule
+
+//content: the following groups:
+//Field Definitions
+//ASPParameters
+//ASPTypes
+//SCCPportTypeDefinitions
+//ASPTemplateDefinitionsSending
+//ASPTemplateDefinitionsReceiving
+//ethlel: 08.23:"reserved" fields removed
+//SCCP_PAR_Importance chenged from structure to integer
+//type enumerated SCCP_ASPfield_ParameterName removed
+
+import from General_Types  all;
+
+group FieldDefinitions
+{
+
+//--------------------------------------------------------------------------------
+// Field Address Indicator (Q713 $3.4.1)
+//--------------------------------------------------------------------------------
+type record  SCCP_ASPfield_AddressIndicator
+{
+  BIT1n          pointCodeIndic,
+  BIT1n          ssnIndicator,
+  BIT4n          globalTitleIndic,
+  BIT1n          routingIndicator
+}
+
+//--------------------------------------------------------------------------------
+// Subfield Signalling Point Code (Q713 $3.4.2.1)
+//--------------------------------------------------------------------------------
+// type changed from BIT14 to bitstring 2003.11.04 baat
+
+
+// supposed that the leading zeros are filled in according to specification
+// i.e.: length itu: 16 (2 reserved)
+//              ansi:24
+//              ttc national: 16 (0 spare)
+
+type bitstring SCCP_ASPfield_SignallingPointCode;
+
+type union  SCCP_ASPfield_GlobalTitle
+{
+   SCCP_ASPfield_GlobalTitle_NoA                    gti0001,
+   SCCP_ASPfield_GlobalTitle_TT                     gti0010,
+   SCCP_ASPfield_GlobalTitle_TT_NP_ES               gti0011, //ansi: gti=0001
+   SCCP_ASPfield_SignallingPointCode_TT_NP_ES_NoA   gti0100
+   //octetstring					                            gti0000
+}
+
+
+//--------------------------------------------------------------------------------
+// Subfield Global Title, Nature of address only
+  //ITU: GTI=0001, Q713 $3.4.2.3.1
+  //ANSI: -
+
+type record  SCCP_ASPfield_GlobalTitle_NoA
+{
+   BIT7n          natureOfAddress,
+   BIT1n          oddeven,
+   hexstring      globalTitleAddress
+   //it should be hexstring, number digits are in BCD;
+   //hexstring already supported by ETH compiler
+}
+
+
+//--------------------------------------------------------------------------------
+// Global Title, Translation type only
+// ITU:   GTI=0010, Q713 $3.4.2.3.2
+// ANSI:  GTI=0010, Figure6A/T1.112.3
+
+type record  SCCP_ASPfield_GlobalTitle_TT
+{
+  OCT1n           translationType,
+  hexstring       globalTitleAddress
+}
+
+
+//--------------------------------------------------------------------------------
+// Global Title, Translation type & numbering plan & encoding scheme
+// ITU: GTI=0011, Q713 $3.4.2.3.3)
+// ANSI GTI=0001, Figure6/T1.112.3
+
+type record  SCCP_ASPfield_GlobalTitle_TT_NP_ES
+{
+   OCT1n          translationType,
+   BIT4n          encodingScheme,
+   BIT4n          numberingPlan,
+   hexstring      globalTitleAddress
+}
+
+
+//--------------------------------------------------------------------------------
+// Global Title, Translation type & numbering plan & encoding scheme & nature of
+// address
+  // GTI=0100, Q713 $3.4.2.3.4)
+  // ANSI: -
+
+type record  SCCP_ASPfield_SignallingPointCode_TT_NP_ES_NoA
+{
+   OCT1n          translationType,
+   BIT4n          encodingScheme,
+   BIT4n          numberingPlan,
+   BIT7n          natureOfAddress,
+   hexstring      globalTitleAddress
+}
+
+
+}//endgroup FieldDefinitions
+
+
+
+
+//********************************************************************************
+//********************************************************************************
+//                                   ASPDefinitions
+//********************************************************************************
+//********************************************************************************
+group ASPParameters
+{
+//--------------------------------------------------------------------------------
+// Parameter Address
+//--------------------------------------------------------------------------------
+
+type  record SCCP_PAR_Address
+{
+  SCCP_ASPfield_AddressIndicator      addressIndicator,
+  SCCP_ASPfield_SignallingPointCode   signPointCode      optional,
+  integer                             subsystemNumber    optional,
+  SCCP_ASPfield_GlobalTitle           globalTitle        optional
+}
+
+//--------------------------------------------------------------------------------
+// Parameter Quality of service
+//--------------------------------------------------------------------------------
+
+
+type integer SCCP_PAR_Quality_Of_Service;
+
+//--------------------------------------------------------------------------------
+// Parameter Expedited data selection
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_Expedited_Data_Sel;
+
+//--------------------------------------------------------------------------------
+// Parameter User Data
+//--------------------------------------------------------------------------------
+
+//type  SCCP_param_Data SCCP_PAR_UserData;
+
+type  octetstring SCCP_PAR_UserData;
+// ETHLAFA: type changed from RANAP_PDU to octetstring 020718
+
+//--------------------------------------------------------------------------------
+// Parameter Connection Id
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_Connection_Id;
+
+
+//--------------------------------------------------------------------------------
+// Parameter Importance
+//--------------------------------------------------------------------------------
+
+
+type    integer         SCCP_PAR_Importance;
+
+
+//--------------------------------------------------------------------------------
+// Parameter Originator
+//--------------------------------------------------------------------------------
+//Undefined (0)
+//SCCP User (or Network Service User-NSU)(1)
+//SCCP itself (or Network Service Provider-NSP)(2)
+
+type integer SCCP_PAR_Originator;
+
+//--------------------------------------------------------------------------------
+// Parameter Reason
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_Reason;
+
+
+//--------------------------------------------------------------------------------
+// Parameter Return Option
+//--------------------------------------------------------------------------------
+//bit0==0-return option off
+//bit0==1-return option on
+
+type BIT8n SCCP_PAR_Return_Option;
+
+
+//--------------------------------------------------------------------------------
+// Parameter Sequence Control
+//--------------------------------------------------------------------------------
+//bit0 == 0-sequence control off
+//bit0 == 1-sequence control on
+
+type BIT8n SCCP_PAR_Sequence_Control;
+
+//--------------------------------------------------------------------------------
+// Parameter Reason For Return
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_Reason_For_Return;
+
+
+//--------------------------------------------------------------------------------
+// Parameter Subsystem Number
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_SubSystemNumber;
+
+//--------------------------------------------------------------------------------
+// Parameter User Status
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_User_Status;
+
+//--------------------------------------------------------------------------------
+// Parameter Subsystem Multiplicity Indicator
+//--------------------------------------------------------------------------------
+
+type integer SCCP_PAR_Subsystem_multi_indicator;
+
+}//endgroup ASPParameters
+
+group ASPTypes
+{
+//********************************************************************************
+// Network service primitives  Q711
+//********************************************************************************
+
+
+type record ASP_SCCP_N_CONNECT_req
+{
+   SCCP_PAR_Address                 calledAddress,
+   SCCP_PAR_Address                 callingAddress     optional,
+   SCCP_PAR_Expedited_Data_Sel	    expeditedDataSel   optional,
+   SCCP_PAR_Quality_Of_Service      qualityOfService   optional,
+   SCCP_PAR_UserData                userData           optional,
+   SCCP_PAR_Connection_Id           connectionId       optional,
+   SCCP_PAR_Importance              importance         optional
+}
+
+
+type record ASP_SCCP_N_CONNECT_ind
+{
+   SCCP_PAR_Address                 calledAddress,
+   SCCP_PAR_Address                 callingAddress     optional,
+   SCCP_PAR_Quality_Of_Service      qualityOfService   optional,
+   SCCP_PAR_UserData                userData           optional,
+   SCCP_PAR_Connection_Id           connectionId       optional,
+   SCCP_PAR_Importance              importance         optional
+}
+
+
+type record ASP_SCCP_N_CONNECT_res
+{
+   SCCP_PAR_Address                	respondingAddress optional,
+   SCCP_PAR_Expedited_Data_Sel 		  expeditedDataSel  optional,
+   SCCP_PAR_Quality_Of_Service 		  qualityOfService  optional,
+   SCCP_PAR_UserData  			        userData	        optional,
+   SCCP_PAR_Connection_Id 		      connectionId 	    optional,
+   SCCP_PAR_Importance 			        importance        optional
+}
+
+
+type record ASP_SCCP_N_CONNECT_cfm
+{
+  SCCP_PAR_Address              respondingAddress optional,
+  SCCP_PAR_Quality_Of_Service   qualityOfService  optional,
+  SCCP_PAR_UserData             userData          optional,
+  SCCP_PAR_Connection_Id        connectionId      optional,
+  SCCP_PAR_Importance           importance        optional
+}
+
+
+type record ASP_SCCP_N_DATA_req
+{
+  SCCP_PAR_UserData       userData               ,
+  SCCP_PAR_Connection_Id  connectionId  optional ,
+  SCCP_PAR_Importance     importance    optional
+}
+
+
+type record ASP_SCCP_N_DATA_ind
+{
+  SCCP_PAR_UserData       userData               ,
+  SCCP_PAR_Connection_Id  connectionId optional  ,
+  SCCP_PAR_Importance     importance   optional
+}
+
+
+type record ASP_SCCP_N_DISCONNECT_req
+{
+  SCCP_PAR_Address         respondingAddress  optional,
+  SCCP_PAR_Reason          reason                      ,
+  SCCP_PAR_UserData        userData           optional ,
+  SCCP_PAR_Connection_Id   connectionId       optional ,
+  SCCP_PAR_Importance      importance         optional
+}
+
+
+type record ASP_SCCP_N_DISCONNECT_ind
+{
+  SCCP_PAR_Originator     originator                  ,
+  SCCP_PAR_Address        respondingAddress  optional ,
+  SCCP_PAR_Reason         reason                      ,
+  SCCP_PAR_UserData       userData           optional ,
+  SCCP_PAR_Connection_Id  connectionId       optional ,
+  SCCP_PAR_Importance     importance         optional
+}
+
+
+type record ASP_SCCP_N_UNITDATA_req
+{
+  SCCP_PAR_Address          calledAddress               ,
+  SCCP_PAR_Address          callingAddress              ,
+  SCCP_PAR_Sequence_Control sequenceControl    optional ,
+  SCCP_PAR_Return_Option    returnOption       optional ,
+  SCCP_PAR_UserData         userData                    ,
+  SCCP_PAR_Importance       importance         optional
+ }
+
+
+type record ASP_SCCP_N_UNITDATA_ind
+{
+  SCCP_PAR_Address           calledAddress              ,
+  SCCP_PAR_Address           callingAddress             ,
+  SCCP_PAR_Sequence_Control  sequenceControl  optional  ,
+  SCCP_PAR_Return_Option     returnOption     optional  ,
+  SCCP_PAR_UserData          userData                   ,
+  SCCP_PAR_Importance        importance       optional
+}
+
+
+type record ASP_SCCP_N_NOTICE_ind
+{
+  SCCP_PAR_Address               calledAddress            ,
+  SCCP_PAR_Address               callingAddress           ,
+  SCCP_PAR_Reason_For_Return     reasonForReturn          ,
+  SCCP_PAR_UserData              userData                 ,
+  SCCP_PAR_Importance            importance       optional
+}
+
+
+type record ASP_SCCP_N_STATE_ind
+{
+  SCCP_PAR_SubSystemNumber           affectedSubSystem    ,
+  SCCP_PAR_User_Status               userStatus           ,
+  SCCP_PAR_Subsystem_multi_indicator subsystmultiindicator  optional
+}
+
+
+
+type record ASP_SCCP_N_RESET_req
+{
+  SCCP_PAR_Originator     originator,  //always NSU
+  SCCP_PAR_Reason         reason,
+  SCCP_PAR_Connection_Id  connectionId optional
+}
+
+type record ASP_SCCP_N_RESET_ind
+{
+  SCCP_PAR_Originator     originator,
+  SCCP_PAR_Reason         reason,
+  SCCP_PAR_Connection_Id  connectionId optional
+}
+
+type record ASP_SCCP_N_RESET_resp
+{
+    SCCP_PAR_Connection_Id  connectionId optional
+}
+
+type record ASP_SCCP_N_RESET_cfm
+{
+    SCCP_PAR_Connection_Id  connectionId optional
+}
+
+} //endgroup  ASPTypes
+
+
+group SCCP_PT_Definitions
+{
+//*******************************************************************
+//   Port Type definitions
+//*******************************************************************
+
+type port SCCPasp_SP_PT
+message
+{
+
+  in    ASP_SCCP_N_CONNECT_req,   ASP_SCCP_N_CONNECT_res,
+        ASP_SCCP_N_DATA_req,      ASP_SCCP_N_DISCONNECT_req,
+        ASP_SCCP_N_UNITDATA_req,  ASP_SCCP_N_RESET_req,
+        ASP_SCCP_N_RESET_resp;
+
+  out   ASP_SCCP_N_CONNECT_ind,   ASP_SCCP_N_CONNECT_cfm,
+        ASP_SCCP_N_DATA_ind,      ASP_SCCP_N_DISCONNECT_ind,
+        ASP_SCCP_N_UNITDATA_ind,  ASP_SCCP_N_NOTICE_ind,
+        ASP_SCCP_N_STATE_ind,     ASP_SCCP_N_RESET_ind,
+        ASP_SCCP_N_RESET_cfm;
+
+} with {extension "internal"}
+
+
+type port SCCPasp_PT
+message
+{
+
+  in  ASP_SCCP_N_CONNECT_ind,   ASP_SCCP_N_CONNECT_cfm,
+      ASP_SCCP_N_DATA_ind,      ASP_SCCP_N_DISCONNECT_ind,
+      ASP_SCCP_N_UNITDATA_ind,  ASP_SCCP_N_NOTICE_ind,
+      ASP_SCCP_N_STATE_ind,     ASP_SCCP_N_RESET_ind,
+      ASP_SCCP_N_RESET_cfm;
+
+  out ASP_SCCP_N_CONNECT_req,   ASP_SCCP_N_CONNECT_res,
+      ASP_SCCP_N_DATA_req,      ASP_SCCP_N_DISCONNECT_req,
+      ASP_SCCP_N_UNITDATA_req,  ASP_SCCP_N_RESET_req,
+      ASP_SCCP_N_RESET_resp;
+
+} with {extension "internal"}
+
+
+
+}// endgroup SCCP_PT_Definitions
+
+
+
+
+//********************************************************************************
+// ASP    Template         Definitions
+//********************************************************************************
+
+
+group ASPTemplateDefinitionsSending
+
+
+{
+
+
+template         ASP_SCCP_N_CONNECT_req   t_ASP_N_CONNECT_req
+(
+
+ template          SCCP_PAR_Address            PAR_CalledAddress  ,
+ template          SCCP_PAR_Address            PAR_CallingAddress ,
+ template          SCCP_PAR_Expedited_Data_Sel PAR_ExpDataSel     ,
+ template          SCCP_PAR_Quality_Of_Service PAR_QoS            ,
+ template          SCCP_PAR_UserData           PAR_UserData       ,
+ template          SCCP_PAR_Connection_Id      PAR_ConnID         ,
+ template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    calledAddress      :=PAR_CalledAddress  ,
+    callingAddress     :=PAR_CallingAddress ,
+    expeditedDataSel   :=PAR_ExpDataSel     ,
+    qualityOfService   :=PAR_QoS            ,
+    userData           :=PAR_UserData       ,
+    connectionId       :=PAR_ConnID         ,
+    importance         :=PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_CONNECT_ind  t_ASP_N_CONNECT_ind
+(
+ template          SCCP_PAR_Address            PAR_CalledAddress  ,
+ template          SCCP_PAR_Address            PAR_CallingAddress ,
+ template          SCCP_PAR_Quality_Of_Service PAR_QoS            ,
+ template          SCCP_PAR_UserData           PAR_UserData       ,
+ template          SCCP_PAR_Connection_Id      PAR_ConnID         ,
+ template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    calledAddress      :=PAR_CalledAddress ,
+    callingAddress     :=PAR_CallingAddress,
+    qualityOfService   :=PAR_QoS           ,
+    userData           :=PAR_UserData      ,
+    connectionId       :=PAR_ConnID        ,
+    importance         := PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_CONNECT_res  t_ASP_N_CONNECT_res
+(
+
+  template          SCCP_PAR_Address            PAR_RespondingAddress  ,
+  template          SCCP_PAR_Expedited_Data_Sel PAR_ExpDataSel         ,
+  template          SCCP_PAR_Quality_Of_Service PAR_QoS                ,
+  template          SCCP_PAR_UserData           PAR_UserData           ,
+  template          SCCP_PAR_Connection_Id      PAR_ConnID             ,
+  template          SCCP_PAR_Importance         PAR_Imp
+
+):=
+  {
+    respondingAddress:= PAR_RespondingAddress ,
+    expeditedDataSel := PAR_ExpDataSel        ,
+    qualityOfService := PAR_QoS               ,
+    userData         := PAR_UserData          ,
+    connectionId     := PAR_ConnID            ,
+    importance       := PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_CONNECT_cfm t_ASP_N_CONNECT_cfm
+(
+  template          SCCP_PAR_Address            PAR_RespondingAddress  ,
+  template          SCCP_PAR_Quality_Of_Service PAR_QoS                ,
+  template          SCCP_PAR_UserData           PAR_UserData           ,
+  template          SCCP_PAR_Connection_Id      PAR_ConnID             ,
+  template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    respondingAddress:= PAR_RespondingAddress ,
+    qualityOfService := PAR_QoS               ,
+    userData         := PAR_UserData          ,
+    connectionId     := PAR_ConnID            ,
+    importance       := PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_DATA_req   t_ASP_N_DATA_req
+(
+  template          SCCP_PAR_UserData           PAR_UserData           ,
+  template          SCCP_PAR_Connection_Id      PAR_ConnID             ,
+  template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    userData         := PAR_UserData          ,
+    connectionId     := PAR_ConnID            ,
+    importance       := PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_DATA_ind    t_ASP_N_DATA_ind
+(
+  template          SCCP_PAR_UserData           PAR_UserData           ,
+  template          SCCP_PAR_Connection_Id      PAR_ConnID             ,
+  template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    userData         := PAR_UserData          ,
+    connectionId     := PAR_ConnID            ,
+    importance       := PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_DISCONNECT_req  t_ASP_N_DISCONNECT_req
+(
+ template          SCCP_PAR_Address            PAR_RespondingAddress  ,
+ template          SCCP_PAR_Reason             PAR_Reason             ,
+ template          SCCP_PAR_UserData           PAR_UserData           ,
+ template          SCCP_PAR_Connection_Id      PAR_ConnID             ,
+ template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+   respondingAddress:= PAR_RespondingAddress ,
+   reason           := PAR_Reason            ,
+   userData         := PAR_UserData          ,
+   connectionId     := PAR_ConnID            ,
+   importance       := PAR_Imp
+}
+
+
+template         ASP_SCCP_N_DISCONNECT_ind    t_ASP_N_DISCONNECT_ind
+(
+  template         SCCP_PAR_Originator         PAR_Originator         ,
+  template         SCCP_PAR_Address            PAR_RespondingAddress  ,
+  template         SCCP_PAR_Reason             PAR_Reason             ,
+  template         SCCP_PAR_UserData           PAR_UserData           ,
+  template         SCCP_PAR_Connection_Id      PAR_ConnID             ,
+  template         SCCP_PAR_Importance         PAR_Imp
+
+):=
+  {
+    originator       :=PAR_Originator	     ,
+    respondingAddress:= PAR_RespondingAddress ,
+    reason           := PAR_Reason            ,
+    userData         := PAR_UserData          ,
+    connectionId     := PAR_ConnID            ,
+    importance       := PAR_Imp
+  }
+
+
+
+
+template         ASP_SCCP_N_UNITDATA_req    t_ASP_N_UNITDATA_req
+(
+
+template           SCCP_PAR_Address            PAR_CalledAddress  ,
+template           SCCP_PAR_Address            PAR_CallingAddress ,
+template           SCCP_PAR_Sequence_Control   PAR_SeqCtrl        ,
+template           SCCP_PAR_Return_Option      PAR_RetOpt         ,
+template           SCCP_PAR_UserData           PAR_UserData       ,
+template           SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    calledAddress               :=PAR_CalledAddress ,
+    callingAddress              :=PAR_CallingAddress,
+    sequenceControl             :=PAR_SeqCtrl       ,
+    returnOption                :=PAR_RetOpt        ,
+    userData                    :=PAR_UserData      ,
+    importance                  :=PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_UNITDATA_ind t_ASP_N_UNITDATA_ind
+(
+  template          SCCP_PAR_Address            PAR_CalledAddress  ,
+  template          SCCP_PAR_Address            PAR_CallingAddress ,
+  template          SCCP_PAR_Sequence_Control   PAR_SeqCtrl        ,
+  template          SCCP_PAR_Return_Option      PAR_RetOpt         ,
+  template          SCCP_PAR_UserData           PAR_UserData       ,
+  template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    calledAddress               :=PAR_CalledAddress ,
+    callingAddress              :=PAR_CallingAddress,
+    sequenceControl             :=PAR_SeqCtrl       ,
+    returnOption                :=PAR_RetOpt        ,
+    userData                    :=PAR_UserData      ,
+    importance                  :=PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_NOTICE_ind t_ASP_N_NOTICE_ind
+(
+  template          SCCP_PAR_Address            PAR_CalledAddress  ,
+  template          SCCP_PAR_Address            PAR_CallingAddress ,
+  template          SCCP_PAR_Reason_For_Return  PAR_ReasForRet     ,
+  template          SCCP_PAR_UserData           PAR_UserData       ,
+  template          SCCP_PAR_Importance         PAR_Imp
+):=
+  {
+    calledAddress               :=PAR_CalledAddress ,
+    callingAddress              :=PAR_CallingAddress,
+    reasonForReturn             :=PAR_ReasForRet   ,
+    userData                    :=PAR_UserData      ,
+    importance                  :=PAR_Imp
+  }
+
+
+template         ASP_SCCP_N_STATE_ind  t_ASP_N_STATE_ind
+(
+  template              SCCP_PAR_SubSystemNumber             PAR_SSN         ,
+  template              SCCP_PAR_User_Status                 PAR_UserStatus  ,
+  template              SCCP_PAR_Subsystem_multi_indicator   PAR_Smi
+):=
+  {
+    affectedSubSystem     :=PAR_SSN        ,
+    userStatus            :=PAR_UserStatus ,
+    subsystmultiindicator :=PAR_Smi
+  }
+
+template          ASP_SCCP_N_RESET_req t_ASP_N_RESET_req
+(
+  template        	SCCP_PAR_Originator     PAR_Originator,
+  template       	        SCCP_PAR_Reason         PAR_Reason,
+  template        	SCCP_PAR_Connection_Id  PAR_Connection_Id
+):=
+  {
+    originator     :=PAR_Originator,
+    reason         :=PAR_Reason,
+    connectionId  :=PAR_Connection_Id
+  }
+
+
+template         ASP_SCCP_N_RESET_ind  t_ASP_N_RESET_ind
+(
+  template        	SCCP_PAR_Originator     PAR_Originator,
+  template        	SCCP_PAR_Reason         PAR_Reason,
+  template        	SCCP_PAR_Connection_Id  PAR_Connection_Id
+):=
+  {
+    originator     :=PAR_Originator,
+    reason         :=PAR_Reason,
+    connectionId  :=PAR_Connection_Id
+  }
+
+template         ASP_SCCP_N_RESET_resp  t_ASP_N_RESET_resp
+(
+  template        	SCCP_PAR_Connection_Id  PAR_Connection_Id
+):=
+  {
+    connectionId  :=PAR_Connection_Id
+  }
+
+template         ASP_SCCP_N_RESET_cfm  t_ASP_N_RESET_cfm
+(
+  template       	SCCP_PAR_Connection_Id  PAR_Connection_Id
+):=
+  {
+    connectionId  :=PAR_Connection_Id
+  }
+
+
+
+}//endgroup ASPTemplateDefinitionsSending
+
+//********************************************************************************
+
+group ASPTemplateDefinitionsReceiving
+
+
+{
+
+
+template         ASP_SCCP_N_CONNECT_req   tr_ASP_N_CONNECT_req:=
+{
+  calledAddress      :=?,
+  callingAddress     :=*,
+  expeditedDataSel   :=*,
+  qualityOfService   :=*,
+  userData           :=*,
+  connectionId       :=*,
+  importance         :=*
+}
+
+
+template         ASP_SCCP_N_CONNECT_ind  tr_ASP_N_CONNECT_ind:=
+{
+  calledAddress      :=?,
+  callingAddress     :=*,
+  qualityOfService   :=*,
+  userData           :=*,
+  connectionId       :=*,
+  importance         :=*
+}
+
+
+template         ASP_SCCP_N_CONNECT_res  tr_ASP_N_CONNECT_res:=
+{
+  respondingAddress:= *,
+  expeditedDataSel := *,
+  qualityOfService := *,
+  userData         := *,
+  connectionId     := *,
+  importance       := *
+}
+
+
+template         ASP_SCCP_N_CONNECT_cfm tr_ASP_N_CONNECT_cfm:=
+{
+  respondingAddress:= *,
+  qualityOfService := *,
+  userData         := *,
+  connectionId     := *,
+  importance       := *
+}
+
+
+template         ASP_SCCP_N_DATA_req   tr_ASP_N_DATA_req :=
+{
+  userData         := ?,
+  connectionId     := *,
+  importance       := *
+}
+
+
+template         ASP_SCCP_N_DATA_ind    tr_ASP_N_DATA_ind:=
+{
+  userData         := ?,
+  connectionId     := *,
+  importance       := *
+}
+
+
+template         ASP_SCCP_N_DISCONNECT_req  tr_ASP_N_DISCONNECT_req:=
+{
+  respondingAddress:= *,
+  reason           := ?,
+  userData         := *,
+  connectionId     := *,
+  importance       := *
+}
+
+
+template         ASP_SCCP_N_DISCONNECT_ind    tr_ASP_N_DISCONNECT_ind:=
+{
+  originator       := ?,
+  respondingAddress:= *,
+  reason           := ?,
+  userData         := *,
+  connectionId     := *,
+  importance       := *
+}
+
+
+
+
+template         ASP_SCCP_N_UNITDATA_req    tr_ASP_N_UNITDATA_req:=
+{
+  calledAddress               :=?,
+  callingAddress              :=?,
+  sequenceControl             :=*,
+  returnOption                :=*,
+  userData                    :=?,
+  importance                  :=*
+}
+
+
+template         ASP_SCCP_N_UNITDATA_ind tr_ASP_N_UNITDATA_ind:=
+{
+  calledAddress               :=?,
+  callingAddress              :=?,
+  sequenceControl             :=*,
+  returnOption                :=*,
+  userData                    :=?,
+  importance                  :=*
+}
+
+
+template         ASP_SCCP_N_NOTICE_ind tr_ASP_N_NOTICE_ind:=
+{
+  calledAddress               :=?,
+  callingAddress              :=?,
+  reasonForReturn             :=?,
+  userData                    :=?,
+  importance                  :=*
+}
+
+
+template         ASP_SCCP_N_STATE_ind  tr_ASP_N_STATE_ind:=
+{
+  affectedSubSystem     :=?,
+  userStatus            :=?,
+  subsystmultiindicator :=*
+}
+
+template          ASP_SCCP_N_RESET_req tr_ASP_N_RESET_req:=
+{
+  originator     :=?,
+  reason         :=?,
+  connectionId   :=*
+}
+
+
+template         ASP_SCCP_N_RESET_ind  tr_ASP_N_RESET_ind:=
+{
+  originator     :=?,
+  reason         :=?,
+  connectionId   :=*
+}
+
+template         ASP_SCCP_N_RESET_resp  tr_ASP_N_RESET_resp:=
+{
+  connectionId  :=*
+}
+
+template         ASP_SCCP_N_RESET_cfm  tr_ASP_N_RESET_cfm:=
+{
+   connectionId  :=*
+}
+
+
+
+}//endgroup ASPTemplateDefinitionsReceiving
+
+
+
+} //with { encode "RAW"}
+//endmodule SCCP ASP types
+
diff --git a/SCCP_Test/SCCP_Testcases.cfg b/SCCP_Test/SCCP_Testcases.cfg
new file mode 100644
index 0000000..ce35486
--- /dev/null
+++ b/SCCP_Test/SCCP_Testcases.cfg
@@ -0,0 +1,54 @@
+[LOGGING]
+#FileName := "SCCP_selftest.cfg"
+FileMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING
+#ConsoleMask := LOG_ALL
+#ConsoleMask := TTCN_TESTCASE | TTCN_PORTEVENT | TTCN_DEBUG | TTCN_MATCHING 
+#ConsoleMask :=  TTCN_WARNING | TTCN_ERROR | TTCN_TESTCASE | TTCN_STATISTICS | TTCN_PORTEVENT
+#ConsoleMask := LOG_ALL | TTCN_DEBUG | TTCN_MATCHING 
+LogSourceInfo := Yes
+
+[EXECUTE]
+#SCCP_selftest.tc_ConnlessSendingShortASP
+#SCCP_selftest.tc_ConnlessSendingLongASP
+#SCCP_selftest.tc_ConnOrientedShortASPSending
+#SCCP_Testcases.tc_ConnlessSendingLongASP
+SCCP_Testcases.tc_ConnOrientedShortASPSending
+
+[TESTPORT_PARAMETERS]
+
+system.sctp.debug := "yes"
+
+//see documentation (User guide) for the parameters)
+
+
+[MODULE_PARAMETERS]
+
+M3UA_Emulation.tsp_logVerbose := true;
+M3UA_Emulation.tsp_M3UA_Server_Mode := false;
+SCCP_Testcases.tsp_address :=
+{
+  local_sctp_port   := 2905,
+  local_ip_addr  := "10.6.70.19",
+  remote_sctp_port  := 2905,
+  remote_ip_addr := "159.107.193.33"
+}
+
+
+SCCP_Testcases.tsp_own_GT := '14377760'H
+SCCP_Testcases.tsp_remote_GT := '14375760'H
+SCCP_Testcases.tsp_SSN := 8 //8:MSC 5:MAP see 3.4.2.2/Q.713
+SCCP_Testcases.tsp_SIO := '83'O //SCCP national
+SCCP_Testcases.tsp_own_SPC := 2351
+SCCP_Testcases.tsp_remote_SPC := 2300// max value on 14 bits
+SCCP_Testcases.tsp_SLS := 0
+#[tsp_sccp_serviceType := "mtp3_itu" |"mtp3b_itu"|"mtp3_ansi"|"mtp3b_ansi"|  "mtp3b_tcc"]
+SCCP_Testcases.tsp_sccp_serviceType := "mtp3_ttc"
+
+#for mtp3_itu/gti0011 or mtp3_ansi/gti0001 :
+#tsp_translationType := 7
+SCCP_Emulation.tsp_SIF_MaxLength := 272
+SCCP_Emulation.tsp_force_xudt := 0 // 1:yes, 0:no 
+
+[MAIN_CONTROLLER]
+//TCPPort := 7145
+//NumHCs := 1
diff --git a/SCCP_Test/SCCP_Testcases.ttcn b/SCCP_Test/SCCP_Testcases.ttcn
new file mode 100644
index 0000000..0cf1c7a
--- /dev/null
+++ b/SCCP_Test/SCCP_Testcases.ttcn
@@ -0,0 +1,505 @@
+///////////////////////////////////////////////////////////////////////////////
+//
+//
+// Copyright Test Competence Center (TCC) ETH 2007
+//
+//
+//
+// The copyright to the computer  program(s) herein  is the property of TCC. //
+// The program(s) may be used and/or copied only with the written permission //
+// of TCC or in accordance with  the terms and conditions  stipulated in the //
+// agreement/contract under which the program(s) have been supplied
+//
+//
+//
+///////////////////////////////////////////////////////////////////////////////
+//
+//  File: 		    SCCP_TestCases.ttcn
+//  Description:  SS7 SCCP basic SEA test
+//                according to specification ITU-T SS7 SCCP, ANSI ..., TCC ... 
+//  References:   ITU-T: Recommendation Q.711-Q.714, 
+//                ANSI  T1.112-2001, 
+//                TCC   
+//  Rev:          <RnXnn>
+//  Updated:	    2007.04.12
+//  Contact:      http://ttcn.ericsson.se
+//
+
+
+
+
+//Note : this has been modified to include M3UA Emulation and SCTP Test port  
+//Elemer Lelik 12.04.2017
+
+
+
+module SCCP_Testcases
+{//startmodule
+
+modulepar 
+{
+  hexstring tsp_own_GT := '0614377760'H;
+  hexstring tsp_remote_GT := '0614375760'H;
+  integer tsp_SSN := 2; //8:MSC 5:MAP see 3.4.2.2/Q.713
+  octetstring tsp_SIO := '83'O;//SCCP national
+  integer tsp_own_SPC := 461087; // =0x07091E 
+  integer tsp_remote_SPC := 461086; // =0x07091D
+  integer tsp_SLS := 0;
+  charstring tsp_sccp_serviceType := "mtp3_itu";
+  
+  octetstring MTP3_UserPart_SIO;
+  integer MTP3_UserPart_OPC,
+          MTP3_UserPart_DPC,
+          MTP3_UserPart_SLS
+
+
+  SCTP_Association_Address tsp_address := { 0, "", 0, "" };
+
+}//modulepar
+
+import from General_Types all;
+
+import from M3UA_Types all;
+import from M3UA_Emulation all;
+
+import from MTP3asp_Types all;
+import from MTP3asp_PortType all;
+
+
+import from SCCPasp_Types  all;
+import from SCCP_Types  all;
+import from SCCP_Emulation all;
+
+
+import from SCTPasp_Types all;
+import from SCTPasp_PortType  all;
+
+
+
+
+/*************************************
+*   Components
+**************************************/
+
+
+// Model of MSC:
+type component system_CT {
+ 
+     port SCTPasp_PT           sctp;        
+
+   
+};
+
+
+
+
+// Main test component with behaviour SCCPuserA andSCCPuserB
+type component MTC_CT {
+  var SCCP_PAR_Address v_CalledAddress, v_CallingAddress;
+  var integer v_testvalue;
+  var SCCP_CT vc_SCCP_A ;
+
+  var M3UA_CT vc_M3UA ;
+
+  var MSC_SCCP_MTP3_parameters v_BootA;  
+  var SCCP_PAR_Connection_Id v_cid_A ;
+  
+  port SCCPasp_PT A_PORT; //SCCPuserA   
+}
+
+function initBootParams() runs on MTC_CT 
+{
+  v_BootA :=
+  { sio:=
+    { ni:= substr(oct2bit(tsp_SIO),0,2),
+      prio:= substr(oct2bit(tsp_SIO),2,2),
+      si:= substr(oct2bit(tsp_SIO),4,4)
+    },
+    opc:=tsp_own_SPC,
+    dpc:=tsp_remote_SPC, 
+    sls:=tsp_SLS, 
+    sccp_serviceType:=tsp_sccp_serviceType,
+    ssn:= tsp_SSN
+  };
+  return;
+} //initBootParams
+
+function init() runs on MTC_CT //system system_CT
+{
+  initBootParams();
+  log("v_BootA:",v_BootA);
+   
+  // Protocol Stack  creation & connections:
+  vc_SCCP_A:=SCCP_CT.create;
+  vc_M3UA:=M3UA_CT.create;
+
+  connect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+  connect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT);
+  map(vc_M3UA:SCTP_PORT,system:sctp); 
+  
+  vc_M3UA.start(f_M3UA_Emulation(tsp_address));
+  vc_SCCP_A.start( SCCPStart( v_BootA ) ); // Bootparameters 
+
+ 
+  log( "init() is done");
+  
+}// init
+
+function terminate( ) runs on MTC_CT //system system_CT
+{
+  log( "terminate() started");
+  /*while( all component.running != true )
+  {
+    //waits
+  }*/
+    all component.stop;
+
+  unmap(vc_M3UA:SCTP_PORT,system:sctp); 
+  disconnect(vc_M3UA:MTP3_SP_PORT,vc_SCCP_A:MTP3_SCCP_PORT); 
+  disconnect(self:A_PORT,vc_SCCP_A:SCCP_SP_PORT);
+
+  
+    log(" all components stopped");
+    self.stop;
+} //terminate
+
+// function getOddEven returns '0' 
+// if even number of dec digit can be found in GT see Q.713
+function getOddEven( in hexstring pl_GT) return bitstring
+{
+   return int2bit( (lengthof(pl_GT) mod 2) ,1);
+}
+
+function getOddEven_ansi( in hexstring pl_GT) return bitstring
+{
+   if( (lengthof(pl_GT) mod 2) == 0 ) { return '0010'B;} //even
+   else { return '0001'B;} //odd
+}
+
+//******************************************************************
+//function setAddresses_gti0001() runs on MTC_CT
+// Sets CalledAddress and CallingAddress as a gti001-type address
+// according to the cfg file.
+//******************************************************************
+
+function setAddresses_gti0001() runs on MTC_CT
+{
+    if( (tsp_sccp_serviceType == "mtp3_itu") or 
+        (tsp_sccp_serviceType == "mtp3b_itu") or
+        (tsp_sccp_serviceType == "mtp3_ttc") or
+        (tsp_sccp_serviceType == "mtp3b_ttc")
+      ) {
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0001:= {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_remote_GT ),
+            globalTitleAddress := tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+    
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_own_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle:= { 
+          gti0001 := {
+            natureOfAddress := '0000011'B,
+            oddeven := getOddEven( tsp_own_GT ), 
+            globalTitleAddress := tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+      
+    } else if(
+        (tsp_sccp_serviceType == "mtp3_ansi") or
+        (tsp_sccp_serviceType == "mtp3b_ansi")          
+      ) {
+      
+      v_CalledAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEven_ansi( tsp_remote_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_remote_GT
+          }
+        }//globalTitle
+      } // v_CalledAddress
+      
+      v_CallingAddress :={ 
+        addressIndicator  := {
+          pointCodeIndic := '1'B,
+          ssnIndicator := '1'B,
+          globalTitleIndic := '0001'B,
+          routingIndicator := '0'B
+        },//addressIndicator
+        signPointCode     := SCCP_SPC_int2bit(tsp_remote_SPC, tsp_sccp_serviceType, tsp_SIO), // see SCCP.ttcn 
+        subsystemNumber   := tsp_SSN,
+        globalTitle := {
+          gti0011:= {
+            translationType   := int2oct(7,1),
+            encodingScheme    := getOddEven_ansi( tsp_own_GT ),        
+            numberingPlan     := '0111'B,  //ISDN/mobile numbering plan, see T1.112.3-2001/3.4.2.3.1            
+            globalTitleAddress:= tsp_own_GT
+          }
+        }//globalTitle
+      } // v_CallingAddress
+    }//if
+    
+}//setAddresses_gti001
+
+function f_SendAndReceive1N_UNITDATA(in octetstring pl_userdata) runs on MTC_CT 
+{
+  var ASP_SCCP_N_UNITDATA_ind vl_N_UNITDATA_ind;
+  timer TL_timer:= 120.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_UNITDATA_req(  v_CalledAddress,
+                                      v_CallingAddress,
+                                      '00000001'B, //sequence control
+                                      '00000001'B, //return option
+                                      pl_userdata,
+                                      omit ) );
+  alt { 
+    [] A_PORT.receive( tr_ASP_N_UNITDATA_ind ) -> value vl_N_UNITDATA_ind
+      { 
+
+        if( (vl_N_UNITDATA_ind.calledAddress == v_CalledAddress ) and
+        (vl_N_UNITDATA_ind.callingAddress == v_CallingAddress) and 
+        (vl_N_UNITDATA_ind.userData == pl_userdata) )
+        {
+          log("Correct  CalledAddress, CallingAddress and userData received, data are correct");
+          setverdict(pass);
+        }
+        else
+        {
+          log("Some data corrupted");
+          setverdict( fail );
+        }
+      };       
+    [] TL_timer.timeout 
+      { 
+        setverdict( fail );
+        log("Timeout....");
+      };                                
+  } //alt  
+  TL_timer.stop;
+}//f_SendAndReceive1N_UNITDATA
+
+/****************************************************
+Connection Oriented Part
+****************************************************/
+
+/****************************************************
+function f_connect
+Establishes a connection
+(Sends an ASP_SCCP_N_CONNECT_req on A_PORT and waits for 
+N_CONNECT_ind on B_PORT. If it is received, 
+it sends back an ASP_SCCP_N_CONNECT_res on B_PORT and waits for
+N_CONNECT_cfm on A_PORT)
+****************************************************/
+function f_connect() runs on MTC_CT return boolean
+{
+  var ASP_SCCP_N_CONNECT_ind vl_N_CONNECT_ind;
+  var ASP_SCCP_N_CONNECT_cfm vl_N_CONNECT_cfm;
+  setverdict(none);
+  v_cid_A := 13;
+  timer TL_timer:= 120.0;
+  TL_timer.start; 
+  
+  A_PORT.send( t_ASP_N_CONNECT_req( v_CalledAddress,
+                                    v_CallingAddress,
+                                    omit, //expeditedDataSel
+                                    omit, //QoS
+                                    omit, //userData
+                                    v_cid_A, 
+                                    omit //importance
+                                    ) );
+
+  alt {
+    [] A_PORT.receive( tr_ASP_N_CONNECT_cfm ) -> value vl_N_CONNECT_cfm
+      {
+        setverdict( pass );
+        log("f_connect finished successfully");
+        return true;
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( fail );
+        log("Timeout....");
+        return false;
+      }
+  }// alt
+  log("f_connect finished");
+  return false;
+}//f_connect
+
+/****************************************************
+function f_send
+Sends an ASP_SCCP_N_DATA_req on A_PORT and waits for answer in
+A_PORT
+****************************************************/
+function f_send(in octetstring pl_userdata) runs on MTC_CT
+{
+  timer TL_timer:= 120.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_DATA_req ( pl_userdata, v_cid_A, omit) ) ;
+  alt {
+    [] A_PORT.receive
+      {
+        setverdict( pass );
+        log("f_connect finished successfully");
+         
+      }
+    [] TL_timer.timeout 
+      {
+        setverdict( fail );
+        log("Timeout....");
+         
+      }
+      
+  } //alt
+}//f_send
+
+//f_disconnect with timeout
+
+function f_disconnect( ) runs on MTC_CT 
+{
+  var ASP_SCCP_N_DISCONNECT_ind vl_N_DISCONNECT_ind;
+  timer TL_timer:= 25.0;
+  TL_timer.start;
+  A_PORT.send( t_ASP_N_DISCONNECT_req( omit, // respondingAddress
+                                      0,  //reason : end user originated, see 3.11/Q.713
+                                      omit, //userData
+                                      v_cid_A, 
+                                      omit ))
+  alt {
+ 
+    [] A_PORT.receive
+      {
+        repeat;
+      }
+    [] TL_timer.timeout 
+      { 
+        setverdict( pass );
+        log("Timeout....");
+      };           
+  }//alt
+  
+ 
+}//f_disconnect
+
+//===================================================
+// Testcases
+//===================================================
+
+/****************************************************
+tc_ConnlessSendingShortASP
+Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+and receives it in one ASP_SCCP_N_UNITDATA_req.
+SCCP transfers information 
+in udp or (forced) xudp packets.
+****************************************************/
+testcase tc_ConnlessSendingShortASP() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata :='12345678901234567890'O;  
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+ } //tc_ConnlessSendingShortASP
+
+/****************************************************
+ tc_ConnlessSendingLongASP
+ Sends a 300 octet long userdata in one ASP_SCCP_N_UNITDATA_req
+ and receives it in one ASP_SCCP_N_UNITDATA_req.
+ It is used for segmentation and reassembly.
+ SCCP transfers information 
+in xudp packets 
+****************************************************/
+testcase tc_ConnlessSendingLongASP() runs on MTC_CT system system_CT
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  f_SendAndReceive1N_UNITDATA( vl_userdata );
+  terminate(); 
+}//tc_ConnlessSendingLongASP
+
+/****************************************************
+tc_ConnOrientedShortASPSending
+****************************************************/
+testcase tc_ConnOrientedShortASPSending() runs on MTC_CT system system_CT
+{
+  var octetstring vl_userdata;
+  init();
+  setAddresses_gti0001();
+  vl_userdata := '12345678901234567890'O;
+  if(f_connect())
+  {
+    f_send(vl_userdata);
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+tc_ConnOrientedLongASPSending
+****************************************************/
+testcase tc_ConnOrientedLongASPSending() runs on MTC_CT 
+{
+  var octetstring vl_userdata;
+  var integer vl_i;  
+  init();
+  setAddresses_gti0001();
+  vl_userdata := ''O;
+  for(vl_i:=0;vl_i<30;vl_i:=vl_i+1) {
+    vl_userdata := vl_userdata &'12345678901234567890'O;  
+  }
+  if(f_connect())
+  {
+    f_send(vl_userdata);
+    //f_SendAndReceive1N_UNITDATA( vl_userdata );
+    f_disconnect();
+  }
+  terminate(); 
+}
+/****************************************************
+ CONTROL
+****************************************************/
+control 
+{
+  execute( tc_ConnlessSendingShortASP() );
+  execute( tc_ConnlessSendingLongASP() );
+  execute( tc_ConnOrientedShortASPSending());
+  execute( tc_ConnOrientedLongASPSending());
+}
+
+}//module
diff --git a/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd b/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd
new file mode 100644
index 0000000..125ad9f
--- /dev/null
+++ b/SCTPasp_CNL113469/SCTPasp_CNL113469.tpd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2014 Ericsson
+
+  All rights reserved. This program and the accompanying materials
+  are made available under the terms of the Eclipse Public License v1.0
+  which accompanies this distribution, and is available at
+  http://www.eclipse.org/legal/epl-v10.html
+
+
+   File:               SCTPasp_CNL113469.tpd
+   Description:        tpd project file
+   Rev:                R11A
+   Prodnr:             CNL 113 469
+   Updated:            2014-09-24
+   Contact:            http://ttcn.ericsson.se
+
+ -->
+<TITAN_Project_File_Information version="1.0">
+  <ProjectName>SCTPasp_CNL113469</ProjectName>
+  <Folders>
+    <FolderResource projectRelativePath="src" relativeURI="src"/>
+  </Folders>
+  <Files>
+    <FileResource projectRelativePath="src/SCTPasp_PT.cc" relativeURI="src/SCTPasp_PT.cc"/>
+    <FileResource projectRelativePath="src/SCTPasp_PT.hh" relativeURI="src/SCTPasp_PT.hh"/>
+    <FileResource projectRelativePath="src/SCTPasp_PortType.ttcn" relativeURI="src/SCTPasp_PortType.ttcn"/>
+    <FileResource projectRelativePath="src/SCTPasp_Types.ttcn" relativeURI="src/SCTPasp_Types.ttcn"/>
+  </Files>
+  <ActiveConfiguration>Default</ActiveConfiguration>
+  <Configurations>
+    <Configuration name="Default">
+      <ProjectProperties>
+        <MakefileSettings>
+          <generateInternalMakefile>true</generateInternalMakefile>
+          <GNUMake>true</GNUMake>
+          <incrementalDependencyRefresh>true</incrementalDependencyRefresh>
+          <targetExecutable>bin/SCTPasp_CNL113469</targetExecutable>
+          <preprocessorDefines>
+            <listItem>USE_SCTP</listItem>
+          </preprocessorDefines>
+          <buildLevel>Level 3 - Creating object files with dependency update</buildLevel>
+        </MakefileSettings>
+        <LocalBuildSettings>
+          <workingDirectory>bin</workingDirectory>
+        </LocalBuildSettings>
+      </ProjectProperties>
+    </Configuration>
+  </Configurations>
+</TITAN_Project_File_Information>
diff --git a/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc
new file mode 100644
index 0000000..5923989
--- /dev/null
+++ b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_PRI.doc
Binary files differ
diff --git a/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc
new file mode 100644
index 0000000..e0c17fe
--- /dev/null
+++ b/SCTPasp_CNL113469/doc/SCTPasp_CNL113469_UG.doc
Binary files differ
diff --git a/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf b/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf
new file mode 100644
index 0000000..0e66447
--- /dev/null
+++ b/SCTPasp_CNL113469/doc/SCTPasp_FS.pdf
Binary files differ
diff --git a/SCTPasp_CNL113469/src/SCTPasp_PT.cc b/SCTPasp_CNL113469/src/SCTPasp_PT.cc
new file mode 100644
index 0000000..6d7b02b
--- /dev/null
+++ b/SCTPasp_CNL113469/src/SCTPasp_PT.cc
@@ -0,0 +1,1549 @@
+/******************************************************************************
+* Copyright (c) 2005, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Peter Dimitrov- initial implementation and initial documentation
+*  Adam Delic
+*  Eduard Czimbalmos
+*  Endre Kulcsar
+*  Gabor Bettesch
+*  Gabor Szalai
+*  Tamas Buti
+*  Zoltan Medve
+******************************************************************************/
+//
+//  File:               SCTPasp_PT.cc
+//  Description:        SCTPasp test port source
+//  Rev:                R11A
+//  Prodnr:             CNL 113 469
+//
+
+
+#include "SCTPasp_PT.hh"
+
+#include <sys/types.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <netdb.h>
+#include <stdarg.h>
+#include <memory.h>
+#include <fcntl.h>
+#include <string.h>
+#include <errno.h>
+#include <limits.h>
+
+#define BUFLEN 1024
+#define MAP_LENGTH 10
+#ifdef SCTP_ADAPTION_LAYER
+  #ifdef LKSCTP_1_0_7
+    #undef LKSCTP_1_0_7
+    #error LKSCTP_1_0_7 defined but the lksctp older than 1.0.7. Use only -DUSE_SCTP, version is automatically selected
+  #endif  
+  #ifdef LKSCTP_1_0_9
+    #error LKSCTP_1_0_9 defined but the lksctp older than 1.0.7. Use only -DUSE_SCTP, version is automatically selected
+    #undef LKSCTP_1_0_9
+  #endif  
+#else 
+// 1.0.7 or newer
+  #ifdef SCTP_AUTH_CHUNK 
+    // 1.0.9 or newer
+    #ifdef LKSCTP_1_0_7
+      #undef LKSCTP_1_0_7
+      #error LKSCTP_1_0_7 defined but the lksctp newer than 1.0.7. Use only -DUSE_SCTP, version is automatically selected
+    #endif
+    #ifndef LKSCTP_1_0_9
+      #define LKSCTP_1_0_9
+    #endif  
+  #else
+  // 1.0.7
+    #ifdef LKSCTP_1_0_9
+      #undef LKSCTP_1_0_9
+      #error LKSCTP_1_0_9 defined but the lksctp older than 1.0.9. Use only -DUSE_SCTP, version is automatically selected
+    #endif
+    #ifndef LKSCTP_1_0_7
+      #define LKSCTP_1_0_7
+    #endif  
+    
+  #endif
+
+#endif
+
+namespace SCTPasp__PortType {
+
+struct SCTPasp__PT_PROVIDER::fd_map_item
+{   // used by map operations
+  int fd; // socket descriptor
+  boolean erased;
+  boolean processing_message; // if true only part of the message is received
+  boolean einprogress; // connection establishment is in progress
+  void * buf; // buffer
+  ssize_t buflen; // length of the buffer
+  ssize_t nr; // number of received bytes
+  struct sockaddr_in  sin; // storing remote address
+};
+
+
+struct SCTPasp__PT_PROVIDER::fd_map_server_item // server item
+{   // used by map operations
+  int fd; // socket descriptor
+  boolean erased;
+  struct in_addr local_IP_address;
+  unsigned short local_port;
+};
+
+
+SCTPasp__PT_PROVIDER::SCTPasp__PT_PROVIDER(const char *par_port_name)
+  : PORT(par_port_name)
+{
+  simple_mode = FALSE;
+  reconnect = FALSE;
+  reconnect_max_attempts = 6;
+  server_mode = FALSE;
+  debug = FALSE;
+  server_backlog = 1;
+  local_IP_address.s_addr = INADDR_ANY;
+  (void) memset(&initmsg, 0, sizeof(struct sctp_initmsg));
+  initmsg.sinit_num_ostreams = 64;
+  initmsg.sinit_max_instreams = 64;
+  initmsg.sinit_max_attempts = 0;
+  initmsg.sinit_max_init_timeo = 0;
+  (void) memset(&events, 0, sizeof (events));
+  events.sctp_data_io_event = TRUE;
+  events.sctp_association_event = TRUE;
+  events.sctp_address_event = TRUE;
+  events.sctp_send_failure_event = TRUE;
+  events.sctp_peer_error_event = TRUE;
+  events.sctp_shutdown_event = TRUE;
+  events.sctp_partial_delivery_event = TRUE;
+#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+  events.sctp_adaptation_layer_event = TRUE;
+#else
+  events.sctp_adaption_layer_event = TRUE;
+#endif
+  local_port_is_present = FALSE;
+  peer_IP_address_is_present = FALSE;
+  peer_port_is_present = FALSE;
+
+  fd_map=NULL;
+  list_len=0;
+
+  fd_map_server=NULL;
+  list_len_server=0;
+
+  fd = -1;
+  FD_ZERO(&readfds);
+  FD_ZERO(&writefds);
+  local_port=-1;
+  peer_port=-1;
+  receiving_fd=-1;
+}
+
+
+SCTPasp__PT_PROVIDER::~SCTPasp__PT_PROVIDER()
+{
+  for(int i=0;i<list_len;i++) map_delete_item(i);
+  Free(fd_map);
+
+  if(!simple_mode)
+  {
+  for(int i=0;i<list_len_server;i++) map_delete_item_server(i);
+  Free(fd_map_server);
+  }
+}
+
+
+void SCTPasp__PT_PROVIDER::set_parameter(const char *parameter_name,
+  const char *parameter_value)
+{
+
+  if(strcmp(parameter_name, "simple_mode") == 0)
+  {
+  if (strcasecmp(parameter_value,"yes") == 0)
+    simple_mode = TRUE;
+  else if(strcasecmp(parameter_value,"no") == 0)
+    simple_mode = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "reconnect") == 0)
+  {
+  if (strcasecmp(parameter_value,"yes") == 0)
+    reconnect = TRUE;
+  else if(strcasecmp(parameter_value,"no") == 0)
+    reconnect = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "reconnect_max_attempts") == 0)
+  {
+  int value;
+  if ( (sscanf(parameter_value, "%d", &value) == 1) && (value>=0) )
+    reconnect_max_attempts = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "server_mode") == 0)
+  {
+  if (strcasecmp(parameter_value,"yes") == 0)
+    server_mode = TRUE;
+  else if(strcasecmp(parameter_value,"no") == 0)
+    server_mode = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "debug") == 0)
+  {
+  if (strcasecmp(parameter_value,"yes") == 0)
+    debug = TRUE;
+  else if(strcasecmp(parameter_value,"no") == 0)
+    debug = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. Only yes and no can be used!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "server_backlog") == 0)
+  {
+  int value;
+  if ( (sscanf(parameter_value, "%d", &value) == 1) && (value>=0) )
+    server_backlog = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "local_IP_address") == 0)
+  {
+    local_IP_address = get_in_addr((const char *) parameter_value);
+  }
+  else if(strcmp(parameter_name, "local_port") == 0)
+  {
+  unsigned short value;
+  if (sscanf(parameter_value, "%hu", &value) == 1)
+  {
+    local_port = value;
+    local_port_is_present = TRUE;
+  }
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "peer_IP_address") == 0)
+  {
+  peer_IP_address = get_in_addr((const char *) parameter_value);
+  peer_IP_address_is_present = TRUE;
+  }
+  else if(strcmp(parameter_name, "peer_port") == 0)
+  {
+  unsigned short value;
+  if (sscanf(parameter_value, "%hu", &value) == 1)
+  {
+    peer_port = value;
+    peer_port_is_present = TRUE;
+  }
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sinit_num_ostreams") == 0)
+  {
+  long value;
+  if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) )
+    initmsg.sinit_num_ostreams = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sinit_max_instreams") == 0)
+  {
+  long value;
+  if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) )
+    initmsg.sinit_max_instreams = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sinit_max_attempts") == 0)
+  {
+  long value;
+  if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) )
+    initmsg.sinit_max_attempts = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sinit_max_init_timeo") == 0)
+  {
+  long value;
+  if ( (sscanf(parameter_value, "%ld", &value) == 1) && (value>=0) )
+    initmsg.sinit_max_init_timeo = value;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be positive integer!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_association_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_association_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_association_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_address_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_address_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_address_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_send_failure_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_send_failure_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_send_failure_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_peer_error_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_peer_error_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_peer_error_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_shutdown_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_shutdown_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_shutdown_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_partial_delivery_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+    events.sctp_partial_delivery_event = TRUE;
+  else if(strcasecmp(parameter_value,"disabled") == 0)
+    events.sctp_partial_delivery_event = FALSE;
+  else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else if(strcmp(parameter_name, "sctp_adaption_layer_event") == 0)
+  {
+  if (strcasecmp(parameter_value,"enabled") == 0)
+#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+    events.sctp_adaptation_layer_event = TRUE;
+#else
+    events.sctp_adaption_layer_event = TRUE;
+#endif
+   else if(strcasecmp(parameter_value,"disabled") == 0)
+#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+    events.sctp_adaptation_layer_event = FALSE;
+#else
+    events.sctp_adaption_layer_event = FALSE;
+#endif
+   else
+    error("set_parameter(): Invalid parameter value: %s for parameter %s. It should be enabled or disabled!" ,
+    parameter_value, parameter_name);
+  }
+  else
+  TTCN_warning("%s: unknown & unhandled parameter: %s",
+  get_name(), parameter_name);
+  errno = 0;
+}
+
+
+void SCTPasp__PT_PROVIDER::Event_Handler(const fd_set *read_fds,
+  const fd_set *write_fds, const fd_set */*error_fds*/,
+  double /*time_since_last_call*/)
+{
+  // Accepting new client
+  if(!simple_mode)
+  {
+    for(int i=0;i<list_len_server;i++)
+    {
+      if(!fd_map_server[i].erased && FD_ISSET(fd_map_server[i].fd, read_fds))
+      {
+        int newclient_fd;
+        struct sockaddr_in peer_address;
+        socklen_t addrlen = sizeof(peer_address);
+        if ((newclient_fd = accept(fd_map_server[i].fd, (struct sockaddr *)&peer_address, &addrlen)) == -1)
+          error("Event handler: accept error (server mode)!");
+        else
+        {
+          map_put_item(newclient_fd);
+          setNonBlocking(newclient_fd);
+          FD_SET(newclient_fd, &readfds);
+          incoming_message(SCTPasp__Types::ASP__SCTP__Connected(
+                        INTEGER(newclient_fd),
+                        CHARSTRING(inet_ntoa(fd_map_server[i].local_IP_address)),
+                        INTEGER(fd_map_server[i].local_port),
+                        CHARSTRING(inet_ntoa(peer_address.sin_addr)),
+                        INTEGER(ntohs(peer_address.sin_port))));
+          Install_Handler(&readfds, NULL, NULL, 0.0);
+        }
+      }
+    }
+  }
+  else
+  {
+    if(server_mode && FD_ISSET(fd, read_fds))
+    {
+      int newclient_fd;
+      struct sockaddr_in peer_address;
+      socklen_t addrlen = sizeof(peer_address);
+      if ((newclient_fd = accept(fd, (struct sockaddr *)&peer_address, &addrlen)) == -1)
+        error("Event handler: accept error (server mode)!");
+      else
+      {
+        map_put_item(newclient_fd);
+        setNonBlocking(newclient_fd);
+        FD_SET(newclient_fd, &readfds);
+        Install_Handler(&readfds, NULL, NULL, 0.0);
+      }
+    }
+  }
+  // Receiving data
+  for(int i=0;i<list_len;i++)
+  {
+    if(!simple_mode && !fd_map[i].erased && fd_map[i].einprogress &&
+      FD_ISSET(fd_map[i].fd, write_fds))
+    {
+      if (connect(fd_map[i].fd, (struct sockaddr *)&fd_map[i].sin,
+        sizeof (fd_map[i].sin)) == -1)
+      {
+        if(errno == EISCONN)
+        {
+          SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+          asp_sctp_result.client__id() = fd_map[i].fd;
+          asp_sctp_result.error__status() = FALSE;
+          asp_sctp_result.error__message() = OMIT_VALUE;
+          incoming_message(asp_sctp_result);
+          fd_map[i].einprogress = FALSE;
+          FD_CLR(fd_map[i].fd, &writefds);
+          FD_SET(fd_map[i].fd, &readfds);
+          Install_Handler(&readfds, &writefds, NULL, 0.0);
+          errno = 0;
+          log("Connection successfully established to (%s):(%d)",
+            inet_ntoa(peer_IP_address), peer_port);
+        }
+        else
+        {
+          close(fd_map[i].fd);
+          fd = -1;
+          TTCN_warning("Connect error!");
+          SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+          asp_sctp_result.client__id() = fd_map[i].fd;
+          asp_sctp_result.error__status() = TRUE;
+          asp_sctp_result.error__message() = strerror(errno);
+          incoming_message(asp_sctp_result);
+          FD_CLR(fd_map[i].fd, &writefds);
+          map_delete_item_fd(fd_map[i].fd);
+          Install_Handler(&readfds, &writefds, NULL, 0.0);
+          errno = 0;
+          log("Connection establishment to (%s):(%d) failed !",
+            inet_ntoa(peer_IP_address), peer_port);
+        }
+      }
+    }
+
+    if(!fd_map[i].erased && FD_ISSET(fd_map[i].fd, read_fds))
+    {
+      log("Calling Event_Handler.");
+      receiving_fd = fd_map[i].fd;
+
+      struct cmsghdr   *cmsg;
+      struct sctp_sndrcvinfo  *sri;
+      char cbuf[sizeof (*cmsg) + sizeof (*sri)];
+      struct msghdr   msg;
+      struct iovec   iov;
+      size_t   cmsglen = sizeof (*cmsg) + sizeof (*sri);
+
+      if ( !fd_map[i].processing_message )
+      {
+        fd_map[i].buf = Malloc(BUFLEN);
+        fd_map[i].buflen = BUFLEN;
+        iov.iov_base = fd_map[i].buf;
+        iov.iov_len = fd_map[i].buflen;
+      }
+      else
+      {
+        // Set the next read offset
+        log("Event_Handler: setting the next read offset.");
+        iov.iov_base = (char *)fd_map[i].buf + fd_map[i].nr;
+        iov.iov_len = fd_map[i].buflen - fd_map[i].nr;
+      }
+
+      // Set up the msghdr structure for receiving
+      memset(&msg, 0, sizeof (msg));
+      msg.msg_iov = &iov;
+      msg.msg_iovlen = 1;
+      msg.msg_control = cbuf;
+      msg.msg_controllen = cmsglen;
+
+      memset(cbuf, 0, sizeof (*cmsg) + sizeof (*sri));
+      cmsg = (struct cmsghdr *)cbuf;
+      sri = (struct sctp_sndrcvinfo *)(cmsg + 1);
+
+      return_value_t value = getmsg(receiving_fd, &msg);
+      switch(value)
+      {
+        case WHOLE_MESSAGE_RECEIVED:
+          fd_map[i].processing_message = FALSE;
+          // Intercept notifications here
+          if (msg.msg_flags & MSG_NOTIFICATION)
+          {
+            log("Calling event_handler for an incoming notification.");
+            handle_event(fd_map[i].buf);
+          }
+          else
+          {
+            log("Incoming data.");
+            unsigned int ui = ntohl(sri->sinfo_ppid);
+            INTEGER i_ppid;
+            if (ui <= (unsigned long)INT_MAX)
+              i_ppid = ui;
+            else {
+              char sbuf[16];
+              sprintf(sbuf, "%u", ui);
+              i_ppid = INTEGER(sbuf);
+            }
+            incoming_message(SCTPasp__Types::ASP__SCTP(
+                    INTEGER(receiving_fd),
+                    INTEGER(sri->sinfo_stream),
+                    i_ppid,
+                    OCTETSTRING(fd_map[i].nr,(const unsigned char *)fd_map[i].buf)));
+          }
+          Free(fd_map[i].buf);
+          fd_map[i].buf = NULL;
+          break;
+        case PARTIAL_RECEIVE:
+          fd_map[i].processing_message = TRUE;
+          break;
+        case EOF_OR_ERROR:
+          if (!server_mode) fd = -1; // setting closed socket to -1 in client mode (and reconnect mode)
+          FD_CLR(receiving_fd, &readfds);
+          Install_Handler(&readfds, NULL, NULL, 0.0);
+          map_delete_item(i);
+          if (events.sctp_association_event) incoming_message(SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE(
+                  INTEGER(receiving_fd),
+                  SCTPasp__Types::SAC__STATE(SCTP_COMM_LOST)));
+          log("getmsg() returned with NULL. Socket is closed.");
+          if (reconnect) forced_reconnect(reconnect_max_attempts);
+
+          break;
+      }//endswitch
+    }// endif
+  }// endfor
+}
+
+
+void SCTPasp__PT_PROVIDER::user_map(const char *system_port)
+{
+  log("Calling user_map(%s).",system_port);
+  if(simple_mode)
+  {
+    if ( server_mode && reconnect )
+    {
+      error("user_map(): server mode and reconnect mode are mutually exclusive!");
+    }
+    if ( server_mode && !local_port_is_present )
+    {
+      error("user_map(): in server mode local_port must be defined!");
+    }
+
+    // Server mode: turns on listening
+    if (server_mode)
+    {
+      log("Running in SERVER_MODE.");
+      create_socket();
+      if (listen(fd, server_backlog) == -1) error("Listen error!");
+      log("Listening @ (%s):(%d)", inet_ntoa(local_IP_address), local_port);
+      FD_SET(fd, &readfds);
+      Install_Handler(&readfds, NULL, NULL, 0.0);
+    } else if (reconnect) {
+      log("Running in RECONNECT MODE.");
+      forced_reconnect(reconnect_max_attempts+1);
+    } else {
+      log("Running in CLIENT MODE.");
+    }
+  }
+  else
+  {
+    log("Running in NORMAL MODE.");
+  }
+  log("Leaving user_map().");
+}
+
+
+void SCTPasp__PT_PROVIDER::user_unmap(const char *system_port)
+{
+  log("Calling user_unmap(%s).",system_port);
+  Uninstall_Handler();
+  FD_ZERO(&readfds);
+  FD_ZERO(&writefds);
+  if(!simple_mode)
+  {
+    for(int i=0;i<list_len;i++) map_delete_item(i);
+    for(int i=0;i<list_len_server;i++) map_delete_item_server(i);
+  }
+  else
+  {
+    for(int i=0;i<list_len;i++) map_delete_item(i);
+    if(server_mode) close(fd);
+  }
+  log("Leaving user_unmap().");
+}
+
+
+void SCTPasp__PT_PROVIDER::user_start()
+{
+  log("Calling user_start().");
+  log("Leaving user_start().");
+}
+
+
+void SCTPasp__PT_PROVIDER::user_stop()
+{
+  log("Calling user_stop().");
+  log("Leaving user_stop().");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP__Connect& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP_CONNECT).");
+  if(simple_mode)
+  {
+    if (server_mode)
+      error("ASP_SCTP_CONNECT is not allowed in server mode!");
+  }
+  if( !peer_IP_address_is_present && !send_par.peer__hostname().ispresent() )
+    error("Peer IP address should be defined!");
+
+  if( !peer_port_is_present && !send_par.peer__portnumber().ispresent() )
+    error("Peer port should be defined!");
+  if(!simple_mode)
+  {
+    boolean temp_bool = local_port_is_present;
+    local_port_is_present = FALSE;
+    create_socket();  // creating client socket
+    local_port_is_present = temp_bool;
+  }
+  else
+  {
+    if (fd == -1) create_socket();  // checking if there is an open socket
+    else if(FD_ISSET(fd, &readfds)) // Active connection
+      error("ASP_SCTP_CONNECT called during active connection.");
+  }
+  struct sockaddr_in  sin;
+  if(send_par.peer__hostname().ispresent())
+  {
+    peer_IP_address = get_in_addr((const char *)(const CHARSTRING&)send_par.peer__hostname());
+  }
+  if(send_par.peer__portnumber().ispresent())
+    peer_port = (int) (const INTEGER&) send_par.peer__portnumber();
+
+  sin.sin_family = AF_INET;
+  sin.sin_port = htons(peer_port);
+  sin.sin_addr.s_addr = peer_IP_address.s_addr;
+  log("Connecting to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+  // setting non-blocking mode
+  if(!simple_mode) setNonBlocking(fd);
+  if (connect(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1)
+  {
+    if(errno == EINPROGRESS && !simple_mode)
+    {
+      map_put_item(fd);
+      int i = map_get_item(fd);
+      fd_map[i].einprogress = TRUE;
+      fd_map[i].sin.sin_family = AF_INET;
+      fd_map[i].sin.sin_port = htons(peer_port);;
+      fd_map[i].sin.sin_addr.s_addr= peer_IP_address.s_addr;
+      FD_SET(fd, &writefds);
+      Install_Handler(&readfds, &writefds, NULL, 0.0);
+      log("Connection in progress to (%s):(%d)", inet_ntoa(peer_IP_address),
+        peer_port);
+    }
+    else
+    {
+      close(fd);
+      fd = -1;
+      TTCN_warning("Connect error!");
+      SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+      asp_sctp_result.client__id() = OMIT_VALUE;
+      asp_sctp_result.error__status() = TRUE;
+      asp_sctp_result.error__message() = strerror(errno);
+      incoming_message(asp_sctp_result);
+    }
+    errno = 0;
+  }
+  else
+  {
+    SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+    asp_sctp_result.client__id() = fd;
+    asp_sctp_result.error__status() = FALSE;
+    asp_sctp_result.error__message() = OMIT_VALUE;
+    incoming_message(asp_sctp_result);
+    map_put_item(fd);
+    if(simple_mode) setNonBlocking(fd);
+    FD_SET(fd, &readfds);
+    Install_Handler(&readfds, NULL, NULL, 0.0);
+    log("Connection successfully established to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+  }
+  log("Leaving outgoing_send (ASP_SCTP_CONNECT).");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP__ConnectFrom& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP_CONNECTFROM).");
+  if(!simple_mode)
+  {
+    if( !peer_IP_address_is_present && !send_par.peer__hostname().ispresent() )
+      error("Peer IP address should be defined!");
+    if( !peer_port_is_present && !send_par.peer__portnumber().ispresent() )
+      error("Peer port should be defined!");
+    // work around for create_socket()
+    unsigned short temp = local_port; // saving global variables
+    boolean temp_bool = local_port_is_present;
+    struct in_addr temp_local_IP_address = local_IP_address;
+    local_port = (int) (const INTEGER&) send_par.local__portnumber();
+    local_port_is_present = TRUE;
+    if(send_par.local__hostname().ispresent())
+    {
+      local_IP_address = get_in_addr((const char *)(const CHARSTRING&)send_par.local__hostname());
+    }
+    create_socket();  // creating client socket
+
+    struct sockaddr_in  sin;
+    if(send_par.peer__hostname().ispresent())
+    {
+      peer_IP_address = get_in_addr((const char *)(const CHARSTRING&)send_par.peer__hostname());
+    }
+    if(send_par.peer__portnumber().ispresent())
+      peer_port = (int) (const INTEGER&) send_par.peer__portnumber();
+
+    sin.sin_family = AF_INET;
+    sin.sin_port = htons(peer_port);
+    sin.sin_addr.s_addr = peer_IP_address.s_addr;
+    log("Connecting to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+    // setting non-blocking mode
+    setNonBlocking(fd);
+    if (connect(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1)
+    {
+      if(errno == EINPROGRESS)
+      {
+        map_put_item(fd);
+        int i = map_get_item(fd);
+        fd_map[i].einprogress = TRUE;
+        fd_map[i].sin.sin_family = AF_INET;
+        fd_map[i].sin.sin_port = htons(peer_port);;
+        fd_map[i].sin.sin_addr.s_addr= peer_IP_address.s_addr;
+        FD_SET(fd, &writefds);
+        Install_Handler(&readfds, &writefds, NULL, 0.0);
+        log("Connection in progress to (%s):(%d)", inet_ntoa(peer_IP_address),
+          peer_port);
+      }
+      else
+      {
+        close(fd);
+        fd = -1;
+        TTCN_warning("Connect error!");
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = OMIT_VALUE;
+        asp_sctp_result.error__status() = TRUE;
+        asp_sctp_result.error__message() = strerror(errno);
+        incoming_message(asp_sctp_result);
+      }
+      errno = 0;
+    }
+    else
+    {
+      SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+      asp_sctp_result.client__id() = fd;
+      asp_sctp_result.error__status() = FALSE;
+      asp_sctp_result.error__message() = OMIT_VALUE;
+      incoming_message(asp_sctp_result);
+      map_put_item(fd);
+      FD_SET(fd, &readfds);
+      Install_Handler(&readfds, NULL, NULL, 0.0);
+      log("Connection successfully established to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+    }
+    local_port = temp; // restoring global variables
+    local_port_is_present = temp_bool;
+    local_IP_address = temp_local_IP_address;
+  }
+  log("Leaving outgoing_send (ASP_SCTP_CONNECTFROM).");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP__Listen& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP_LISTEN).");
+  if(!simple_mode)
+  {
+    // work around for create_socket()
+    unsigned short temp = local_port; // saving global variables
+    boolean temp_bool = local_port_is_present;
+    struct in_addr temp_local_IP_address = local_IP_address;
+    local_port = (int) (const INTEGER&) send_par.local__portnumber();
+    local_port_is_present = TRUE;
+    if(send_par.local__hostname().ispresent())
+    {
+      local_IP_address = get_in_addr((const char *)(const CHARSTRING&)send_par.local__hostname());
+    }
+    create_socket();
+    if (listen(fd, server_backlog) == -1) error("Listen error!");
+    map_put_item_server(fd, local_IP_address, local_port);
+    log("Listening @ (%s):(%d)", inet_ntoa(local_IP_address), local_port);
+    local_port = temp; // restoring global variables
+    local_port_is_present = temp_bool;
+    local_IP_address = temp_local_IP_address;
+    FD_SET(fd, &readfds);
+    Install_Handler(&readfds, NULL, NULL, 0.0);
+#ifdef SCTP_REPORT_LISTEN_RESULT
+    SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+    asp_sctp_result.client__id() = fd;
+    asp_sctp_result.error__status() = FALSE;
+    asp_sctp_result.error__message() = OMIT_VALUE;
+    incoming_message(asp_sctp_result);
+#endif
+  }
+  log("Leaving outgoing_send (ASP_SCTP_LISTEN).");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP__SetSocketOptions& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP_SETSOCKETOPTIONS).");
+  if(simple_mode)
+  {
+    if (fd == -1) create_socket(); // checking if there is an open socket
+  }
+  switch (send_par.get_selection())
+  {
+    case SCTPasp__Types::ASP__SCTP__SetSocketOptions::ALT_Sctp__init:
+    {
+      (void) memset(&initmsg, 0, sizeof(struct sctp_initmsg));
+      const SCTPasp__Types::SCTP__INIT& init = send_par.Sctp__init();
+      initmsg.sinit_num_ostreams = (int) init.sinit__num__ostreams();
+      initmsg.sinit_max_instreams = (int) init.sinit__max__instreams();
+      initmsg.sinit_max_attempts = (int) init.sinit__max__attempts();
+      initmsg.sinit_max_init_timeo = (int) init.sinit__max__init__timeo();
+      log("Setting SCTP socket options (initmsg).");
+      if (setsockopt(fd, IPPROTO_SCTP, SCTP_INITMSG, &initmsg,
+        sizeof(struct sctp_initmsg)) < 0)
+      {
+         TTCN_warning("Setsockopt error!");
+         SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+         asp_sctp_result.client__id() = fd;
+         asp_sctp_result.error__status() = TRUE;
+         asp_sctp_result.error__message() = strerror(errno);
+         incoming_message(asp_sctp_result);
+         errno = 0;
+      }
+      else
+      {
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = fd;
+        asp_sctp_result.error__status() = FALSE;
+        asp_sctp_result.error__message() = OMIT_VALUE;
+        incoming_message(asp_sctp_result);
+      }
+      break;
+    }
+    case SCTPasp__Types::ASP__SCTP__SetSocketOptions::ALT_Sctp__events:
+    {
+      const SCTPasp__Types::SCTP__EVENTS& event = send_par.Sctp__events();
+      events.sctp_data_io_event = (boolean) event.sctp__data__io__event();
+      events.sctp_association_event = (boolean) event.sctp__association__event();
+      events.sctp_address_event = (boolean) event.sctp__address__event();
+      events.sctp_send_failure_event = (boolean) event.sctp__send__failure__event();
+      events.sctp_peer_error_event = (boolean) event.sctp__peer__error__event();
+      events.sctp_shutdown_event = (boolean) event.sctp__shutdown__event();
+      events.sctp_partial_delivery_event = (boolean) event.sctp__partial__delivery__event();
+#if defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+      events.sctp_adaptation_layer_event = (boolean) event.sctp__adaption__layer__event();
+#else
+      events.sctp_adaption_layer_event = (boolean) event.sctp__adaption__layer__event();
+#endif
+      break;
+    }
+    case SCTPasp__Types::ASP__SCTP__SetSocketOptions::ALT_So__linger:
+    {
+      struct linger so_linger;
+      (void) memset(&so_linger, 0, sizeof (so_linger));
+      const SCTPasp__Types::SO__LINGER& so = send_par.So__linger();
+      so_linger.l_onoff =  (int) so.l__onoff();
+      so_linger.l_linger =  (int) so.l__linger();
+      // Setting a socket level option
+      log("Setting SCTP socket options (so_linger).");
+      if (setsockopt(fd, SOL_SOCKET, SCTP_EVENTS, &so_linger, sizeof (so_linger)) < 0)
+      {
+        TTCN_warning("Setsockopt error!");
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = fd;
+        asp_sctp_result.error__status() = TRUE;
+        asp_sctp_result.error__message() = strerror(errno);
+        incoming_message(asp_sctp_result);
+        errno = 0;
+      }
+      else
+      {
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = fd;
+        asp_sctp_result.error__status() = FALSE;
+        asp_sctp_result.error__message() = OMIT_VALUE;
+        incoming_message(asp_sctp_result);
+      }
+      break;
+    }
+    case SCTPasp__Types::ASP__SCTP__SetSocketOptions::ALT_Sctp__rtoinfo:
+    {
+      struct sctp_rtoinfo sctp_rtoinfo;
+      (void) memset(&sctp_rtoinfo, 0, sizeof (sctp_rtoinfo));
+      const SCTPasp__Types::SCTP__RTOINFO& rto = send_par.Sctp__rtoinfo();
+      int local_fd = (int) rto.client__id();
+      sctp_rtoinfo.srto_initial =  (int) rto.srto__initial();
+      sctp_rtoinfo.srto_max =  (int) rto.srto__max();
+      sctp_rtoinfo.srto_min =  (int) rto.srto__min();
+      // Setting a SCTP level socket option
+      log("Setting SCTP socket options (sctp_rtoinfo).");
+      if (setsockopt(local_fd, IPPROTO_SCTP, SCTP_RTOINFO, &sctp_rtoinfo,
+        sizeof (sctp_rtoinfo)) < 0)
+      {
+        TTCN_warning("Setsockopt error!");
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = local_fd;
+        asp_sctp_result.error__status() = TRUE;
+        asp_sctp_result.error__message() = strerror(errno);
+        incoming_message(asp_sctp_result);
+        errno = 0;
+      }
+      else
+      {
+        SCTPasp__Types::ASP__SCTP__RESULT asp_sctp_result;
+        asp_sctp_result.client__id() = local_fd;
+        asp_sctp_result.error__status() = FALSE;
+        asp_sctp_result.error__message() = OMIT_VALUE;
+        incoming_message(asp_sctp_result);
+      }
+      break;
+    }
+    default:
+      error("Setsocketoptions error: UNBOUND value!");
+      break;
+  }
+  log("Leaving outgoing_send (ASP_SCTP_SETSOCKETOPTIONS).");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP__Close& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP_CLOSE).");
+  if(!simple_mode)
+  {
+    if(send_par.client__id().ispresent())
+    {
+      int local_fd = (int) (const INTEGER&) send_par.client__id();
+      log("NORMAL MODE: closing client/server socket (fd = %d).", local_fd);
+      map_delete_item_fd(local_fd);
+      map_delete_item_fd_server(local_fd);
+      FD_CLR(local_fd, &readfds);
+      Install_Handler(&readfds, &writefds, NULL, 0.0);
+    }
+    else
+    {   // if OMIT is given then all sockets will be closed
+      log("NORMAL MODE: closing all sockets.");
+      for(int i=0;i<list_len;i++) map_delete_item(i);
+      for(int i=0;i<list_len_server;i++) map_delete_item_server(i);
+      FD_ZERO(&readfds);
+      FD_ZERO(&writefds);
+      Install_Handler(&readfds, &writefds, NULL, 0.0); // ???
+    }
+  }
+  else
+  {
+    if (server_mode)
+    {   // closing the given connection
+      if(send_par.client__id().ispresent())
+      {
+        int local_fd = (int) (const INTEGER&) send_par.client__id();
+        log("SERVER MODE: closing client socket (fd = %d).", local_fd);
+        map_delete_item_fd(local_fd);
+        FD_CLR(local_fd, &readfds);
+        Install_Handler(&readfds, NULL, NULL, 0.0);
+      }
+      else
+      {   // if OMIT is given in server mode then all clients will be closed
+        log("SERVER MODE: closing all client sockets.");
+        for(int i=0;i<list_len;i++) map_delete_item(i);
+        FD_ZERO(&readfds);
+        FD_SET(fd, &readfds); // leaving only the listening socket in the fdset
+        Install_Handler(&readfds, NULL, NULL, 0.0);
+      }
+    }
+    else
+    {   // closing the connection to the server
+      if ( send_par.client__id().ispresent() )
+        error("In client mode the client_id field of ASP_SCTP_Close should be set to OMIT!");
+      log("CLIENT MODE: closing socket (fd = %d).", fd);
+      map_delete_item_fd(fd);
+      FD_CLR(fd, &readfds);
+      fd=-1;
+      Install_Handler(&readfds, NULL, NULL, 0.0);
+    }
+  }
+  log("Leaving outgoing_send (ASP_SCTP_CLOSE).");
+}
+
+
+void SCTPasp__PT_PROVIDER::outgoing_send(const SCTPasp__Types::ASP__SCTP& send_par)
+{
+  log("Calling outgoing_send (ASP_SCTP).");
+  struct cmsghdr   *cmsg;
+  struct sctp_sndrcvinfo  *sri;
+  char cbuf[sizeof (*cmsg) + sizeof (*sri)];
+  struct msghdr   msg;
+  struct iovec   iov;
+  const unsigned char *buf;
+
+  buf = (const unsigned char *)send_par.data();
+  iov.iov_len = send_par.data().lengthof();
+
+  memset(&msg, 0, sizeof (msg));
+  iov.iov_base = (char *)buf;
+  msg.msg_iov = &iov;
+  msg.msg_iovlen = 1;
+  msg.msg_control = cbuf;
+  msg.msg_controllen = sizeof (*cmsg) + sizeof (*sri);
+
+  memset(cbuf, 0, sizeof (*cmsg) + sizeof (*sri));
+  cmsg = (struct cmsghdr *)cbuf;
+  sri = (struct sctp_sndrcvinfo *)(cmsg + 1);
+
+  cmsg->cmsg_len = sizeof (*cmsg) + sizeof (*sri);
+  cmsg->cmsg_level = IPPROTO_SCTP;
+  cmsg->cmsg_type  = SCTP_SNDRCV;
+
+  sri->sinfo_stream = (int) send_par.sinfo__stream();
+
+  int target;
+  if(!simple_mode)
+  {
+    if (!send_par.client__id().ispresent())
+      error("In NORMAL mode the client_id field of ASP_SCTP should be set to a valid value and not to omit!");
+    target = (int) (const INTEGER&) send_par.client__id();
+    if ( (map_get_item(target)==-1) && (map_get_item_server(target)==-1)) error("Bad client id! %d",target);
+  }
+  else
+  {
+    if (server_mode)
+    {
+      if (!send_par.client__id().ispresent())
+        error("In server mode the client_id field of ASP_SCTP should be set to a valid value and not to omit!");
+    }
+    else // client mode
+    {
+      if (send_par.client__id().ispresent())
+        error("In client mode the client_id field of ASP_SCTP should be set to OMIT!");
+    }
+    target = fd;
+    if (server_mode)
+      target = (int) (const INTEGER&) send_par.client__id();
+    if (map_get_item(target)==-1) error("Bad client id! %d",target);
+  }
+
+  uint32_t ui;
+  if (send_par.sinfo__ppid().get_val().is_native() && send_par.sinfo__ppid() > 0)
+    ui = (int)send_par.sinfo__ppid();
+  else {
+    OCTETSTRING os = int2oct(send_par.sinfo__ppid(), 4);
+    unsigned char* p = (unsigned char*)&ui;
+    *(p++) = os[3].get_octet();
+    *(p++) = os[2].get_octet();
+    *(p++) = os[1].get_octet();
+    *(p++) = os[0].get_octet();
+  }
+  sri->sinfo_ppid = htonl(ui);
+
+  log("Sending SCTP message to file descriptor %d.", target);
+  if (sendmsg(target, &msg, 0) < 0)
+  {
+    SCTPasp__Types::ASP__SCTP__SENDMSG__ERROR asp_sctp_sendmsg_error;
+    if (server_mode) asp_sctp_sendmsg_error.client__id() = target;
+    else asp_sctp_sendmsg_error.client__id() = OMIT_VALUE;
+    asp_sctp_sendmsg_error.sinfo__stream() = send_par.sinfo__stream();
+    asp_sctp_sendmsg_error.sinfo__ppid() = send_par.sinfo__ppid();
+    asp_sctp_sendmsg_error.data() = send_par.data();
+    incoming_message(asp_sctp_sendmsg_error);
+    TTCN_warning("Sendmsg error! Strerror=%s", strerror(errno));
+
+    errno = 0;
+  }
+  log("Leaving outgoing_send (ASP_SCTP).");
+}
+
+
+SCTPasp__PT_PROVIDER::return_value_t SCTPasp__PT_PROVIDER::getmsg(int fd, struct msghdr *msg)
+{
+  log("Calling getmsg().");
+  int index = map_get_item(fd);
+  if ( !fd_map[index].processing_message ) fd_map[index].nr = 0;
+
+  ssize_t value = recvmsg(fd, msg, 0);
+  if (value <= 0) // EOF or error
+  {
+    log("Leaving getmsg(): EOF or error.");
+    errno = 0;
+    return EOF_OR_ERROR;
+  }
+  fd_map[index].nr += value;
+  log("getmsg(): [%d] bytes received. Receiving buffer now has [%d] bytes.", value, fd_map[index].nr);
+  // Whole message is received, return it.
+  if (msg->msg_flags & MSG_EOR)
+  {
+    log("Leaving getmsg(): whole message is received.");
+    return WHOLE_MESSAGE_RECEIVED;
+  }
+
+  // Maybe we need a bigger buffer, do realloc().
+  if (fd_map[index].buflen == fd_map[index].nr)
+  {
+    log("getmsg(): resizing receiving buffer: [%d] bytes -> [%d] bytes",
+      fd_map[index].buflen, (fd_map[index].buflen * 2));
+    fd_map[index].buf = Realloc(fd_map[index].buf, fd_map[index].buflen * 2);
+    fd_map[index].buflen *= 2;
+  }
+  log("Leaving getmsg(): part of the message is received.");
+  return PARTIAL_RECEIVE;
+}
+
+
+void SCTPasp__PT_PROVIDER::handle_event(void *buf)
+{
+  union sctp_notification  *snp;
+  snp = (sctp_notification *)buf;
+  switch (snp->sn_header.sn_type)
+  {
+    case SCTP_ASSOC_CHANGE:
+    {
+      log("incoming SCTP_ASSOC_CHANGE event.");
+      struct sctp_assoc_change *sac;
+      sac = &snp->sn_assoc_change;
+
+// #ifdef LKSCTP_1_0_7
+      SCTPasp__Types::SAC__STATE sac_state_ttcn;
+      switch(sac->sac_state)
+      {
+       case SCTP_COMM_UP:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__COMM__UP;
+         break;
+
+       case SCTP_COMM_LOST:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__COMM__LOST;
+         break;
+
+       case SCTP_RESTART:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__RESTART;
+         break;
+
+       case SCTP_SHUTDOWN_COMP:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__SHUTDOWN__COMP;
+         break;
+
+       case SCTP_CANT_STR_ASSOC:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__CANT__STR__ASSOC;
+         break;
+
+      default:
+         sac_state_ttcn = SCTPasp__Types::SAC__STATE::SCTP__UNKNOWN__SAC__STATE;
+         TTCN_warning("Unexpected sac_state value received %d", sac->sac_state);
+         break;
+      }
+// #endif
+
+      if(sac->sac_state == SCTP_COMM_LOST)
+      {
+        if(simple_mode)
+        {
+          if (!server_mode) fd = -1; // setting closed socket to -1 in client mode (and reconnect mode)
+          FD_CLR(receiving_fd, &readfds);
+          Install_Handler(&readfds, NULL, NULL, 0.0);
+          map_delete_item_fd(receiving_fd);
+        }
+        else
+        {
+          FD_CLR(receiving_fd, &readfds);
+          Install_Handler(&readfds, NULL, NULL, 0.0);
+          map_delete_item_fd(receiving_fd);
+          map_delete_item_fd_server(receiving_fd);
+        }
+      }
+      if (events.sctp_association_event) incoming_message(SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE(
+                  INTEGER(receiving_fd),
+		  sac_state_ttcn
+                  ));
+
+      if(simple_mode)
+      {
+        if (reconnect && (sac->sac_state == SCTP_COMM_LOST) ) forced_reconnect(reconnect_max_attempts);
+      }
+      break;
+    }
+    case SCTP_PEER_ADDR_CHANGE:{    
+      log("incoming SCTP_PEER_ADDR_CHANGE event.");
+      struct sctp_paddr_change *spc;
+      spc = &snp->sn_paddr_change;
+// #ifdef LKSCTP_1_0_7
+      SCTPasp__Types::SPC__STATE spc_state_ttcn;
+      switch(spc->spc_state)
+      {
+       case SCTP_ADDR_AVAILABLE:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__AVAILABLE;
+         break;
+
+       case SCTP_ADDR_UNREACHABLE:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__UNREACHABLE;
+         break;
+
+       case SCTP_ADDR_REMOVED:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__REMOVED;
+         break;
+
+       case SCTP_ADDR_ADDED:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__ADDED;
+         break;
+
+       case SCTP_ADDR_MADE_PRIM:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__MADE__PRIM;
+         break;
+#if  defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+       case SCTP_ADDR_CONFIRMED:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__ADDR__CONFIRMED;
+         break;
+#endif
+      default:
+         spc_state_ttcn = SCTPasp__Types::SPC__STATE::SCTP__UNKNOWN__SPC__STATE;
+         TTCN_warning("Unexpected spc_state value received %d", spc->spc_state);
+         break;
+      }
+// #endif
+      if (events.sctp_address_event) incoming_message(SCTPasp__Types::ASP__SCTP__PEER__ADDR__CHANGE(
+                  INTEGER(receiving_fd),
+		              spc_state_ttcn
+                  ));
+      break;
+      }
+    case SCTP_REMOTE_ERROR:
+      log("incoming SCTP_REMOTE_ERROR event.");
+      //struct sctp_remote_error *sre;
+      //sre = &snp->sn_remote_error;
+      if (events.sctp_peer_error_event) incoming_message(SCTPasp__Types::ASP__SCTP__REMOTE__ERROR(INTEGER(receiving_fd)));
+      break;
+    case SCTP_SEND_FAILED:
+      log("incoming SCTP_SEND_FAILED event.");
+      //struct sctp_send_failed *ssf;
+      //ssf = &snp->sn_send_failed;
+      if (events.sctp_send_failure_event) incoming_message(SCTPasp__Types::ASP__SCTP__SEND__FAILED(INTEGER(receiving_fd)));
+      break;
+    case SCTP_SHUTDOWN_EVENT:
+      log("incoming SCTP_SHUTDOWN_EVENT event.");
+      //struct sctp_shutdown_event *sse;
+      //sse = &snp->sn_shutdown_event;
+      if (events.sctp_shutdown_event) incoming_message(SCTPasp__Types::ASP__SCTP__SHUTDOWN__EVENT(INTEGER(receiving_fd)));
+      break;
+#if  defined(LKSCTP_1_0_7) || defined(LKSCTP_1_0_9)
+    case SCTP_ADAPTATION_INDICATION:
+      log("incoming SCTP_ADAPTION_INDICATION event.");
+      //struct sctp_adaptation_event *sai;
+      //sai = &snp->sn_adaptation_event;
+      if (events.sctp_adaptation_layer_event) incoming_message(SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION(INTEGER(receiving_fd)));
+      break;
+#else
+    case SCTP_ADAPTION_INDICATION:
+      log("incoming SCTP_ADAPTION_INDICATION event.");
+      //struct sctp_adaption_event *sai;
+      //sai = &snp->sn_adaption_event;
+      if (events.sctp_adaption_layer_event) incoming_message(SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION(INTEGER(receiving_fd)));
+      break;
+#endif
+    case SCTP_PARTIAL_DELIVERY_EVENT:
+      log("incoming SCTP_PARTIAL_DELIVERY_EVENT event.");
+      //struct sctp_pdapi_event *pdapi;
+      //pdapi = &snp->sn_pdapi_event;
+      if (events.sctp_partial_delivery_event) incoming_message(SCTPasp__Types::ASP__SCTP__PARTIAL__DELIVERY__EVENT(INTEGER(receiving_fd)));
+      break;
+    default:
+      TTCN_warning("Unknown notification type!");
+      break;
+  }
+}
+
+
+void SCTPasp__PT_PROVIDER::log(const char *fmt, ...)
+{
+  if(debug)
+  {
+    va_list ap;
+    va_start(ap, fmt);
+    TTCN_Logger::begin_event(TTCN_DEBUG);
+    TTCN_Logger::log_event("SCTPasp Test Port (%s): ", get_name());
+    TTCN_Logger::log_event_va_list(fmt, ap);
+    TTCN_Logger::end_event();
+    va_end(ap);
+
+  }
+}
+
+
+void SCTPasp__PT_PROVIDER::error(const char *fmt, ...)
+{
+  va_list ap;
+  va_start(ap, fmt);
+  TTCN_Logger::begin_event(TTCN_ERROR);
+  TTCN_Logger::log_event("SCTPasp Test Port (%s): ", get_name());
+  TTCN_Logger::log_event_va_list(fmt, ap);
+  TTCN_Logger::end_event();
+  va_end(ap);
+  TTCN_error("Fatal error in SCTPasp Test Port %s (see above).", get_name());
+}
+
+
+void SCTPasp__PT_PROVIDER::forced_reconnect(int attempts)
+{
+  struct sockaddr_in  sin;
+  sin.sin_family = AF_INET;
+  sin.sin_port = htons(peer_port);
+  sin.sin_addr.s_addr = peer_IP_address.s_addr;
+  log("[reconnect] Connecting to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+  unsigned int sleep_interval = 1;
+  int i;
+  for(i = 0; i < attempts; i++)
+  {
+    create_socket();
+    if (connect(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1)
+    {
+      close(fd);
+      fd = -1;
+      TTCN_warning("Connect error!");
+      errno = 0;
+      if( ((i % 2 ) == 0) && (i != 0)) sleep_interval *= 2;
+      sleep(sleep_interval);
+
+    }
+    else
+    {
+      map_put_item(fd);
+      setNonBlocking(fd);
+      FD_SET(fd, &readfds);
+      Install_Handler(&readfds, NULL, NULL, 0.0);
+      log("[reconnect] Connection successfully established to (%s):(%d)", inet_ntoa(peer_IP_address), peer_port);
+      break;
+    }
+  }
+  if (i == attempts) error("Forced reconnect failed! Remote end is unreachable!");
+
+}
+
+
+void SCTPasp__PT_PROVIDER::map_put_item(int fd)
+{
+  int i=0;
+  while((i<list_len) && !fd_map[i].erased) i++; // searching for the free item
+  if(i==list_len)
+  {  // list is full add new elemnts
+    list_len+=MAP_LENGTH;
+    fd_map=(fd_map_item *)Realloc(fd_map,(list_len)*sizeof(fd_map_item));
+    for(int k=i;k<list_len;k++)
+    {  // init new elements
+      fd_map[k].fd=-1;
+      fd_map[k].erased=TRUE;
+      fd_map[k].einprogress=FALSE;
+      fd_map[k].buf=NULL;
+      fd_map[k].buflen=0;
+      fd_map[k].processing_message=FALSE;
+      fd_map[k].nr=0;
+      fd_map[k].sin.sin_family=AF_INET;
+      fd_map[k].sin.sin_port=0;
+      fd_map[k].sin.sin_addr.s_addr=0;
+    }
+  }
+  fd_map[i].fd=fd;        // adding new connection
+  fd_map[i].erased=FALSE;
+}
+
+
+int SCTPasp__PT_PROVIDER::map_get_item(int fd)
+{
+  for(int i = 0; i < list_len; i++)
+    if( !(fd_map[i].erased) && (fd_map[i].fd == fd) ) return i;
+  return(-1);
+}
+
+
+void SCTPasp__PT_PROVIDER::map_delete_item_fd(int fd)
+{
+  if(fd!=-1)
+    for(int i = 0; i < list_len; i++)
+      if( fd_map[i].fd == fd )
+      {
+        map_delete_item(i);
+        break;
+      }
+}
+
+
+void SCTPasp__PT_PROVIDER::map_delete_item(int index)
+{
+  if((index>=list_len) || (index<0)) error("map_delete_item: index out of range (0-%d): %d",list_len-1,index);
+
+  if(fd_map[index].fd!=-1) close(fd_map[index].fd);
+  fd_map[index].fd=-1;
+  fd_map[index].erased=TRUE;
+  fd_map[index].einprogress=FALSE;
+  if(fd_map[index].buf) Free(fd_map[index].buf);
+  fd_map[index].buf=NULL;
+  fd_map[index].buflen=0;
+  fd_map[index].processing_message=FALSE;
+  fd_map[index].nr=0;
+  fd_map[index].sin.sin_family=AF_INET;
+  fd_map[index].sin.sin_port=0;
+  fd_map[index].sin.sin_addr.s_addr=0;
+}
+
+
+void SCTPasp__PT_PROVIDER::map_put_item_server(int fd, struct in_addr local_IP_address, unsigned short local_port)
+{
+  int i=0;
+  while((i<list_len_server) && !fd_map_server[i].erased) i++; // searching for the free item
+  if(i==list_len_server)
+  {  // list is full add new elemnts
+    list_len_server+=MAP_LENGTH;
+    fd_map_server=(fd_map_server_item *)Realloc(fd_map_server,(list_len_server)*sizeof(fd_map_server_item));
+    for(int k=i;k<list_len_server;k++)
+    {  // init new elements
+      fd_map_server[k].fd=-1;
+      fd_map_server[k].erased=TRUE;
+      fd_map_server[k].local_IP_address.s_addr = INADDR_ANY;
+      fd_map_server[k].local_port = 0;
+    }
+  }
+  fd_map_server[i].fd=fd;        // adding new connection
+  fd_map_server[i].erased=FALSE;
+  fd_map_server[i].local_IP_address = local_IP_address;
+  fd_map_server[i].local_port = local_port;
+
+}
+
+
+int SCTPasp__PT_PROVIDER::map_get_item_server(int fd)
+{
+  for(int i = 0; i < list_len_server; i++)
+    if( !(fd_map_server[i].erased) && (fd_map_server[i].fd == fd) ) return i;
+  return(-1);
+}
+
+
+void SCTPasp__PT_PROVIDER::map_delete_item_fd_server(int fd)
+{
+  if(fd!=-1)
+    for(int i = 0; i < list_len_server; i++)
+      if( fd_map_server[i].fd == fd )
+      {
+        map_delete_item_server(i);
+        break;
+      }
+}
+
+
+void SCTPasp__PT_PROVIDER::map_delete_item_server(int index)
+{
+  if((index>=list_len_server) || (index<0)) error("map_delete_item: index out of range (0-%d): %d",list_len_server-1,index);
+
+  if(fd_map_server[index].fd!=-1) close(fd_map_server[index].fd);
+  fd_map_server[index].fd=-1;
+  fd_map_server[index].erased=TRUE;
+  fd_map_server[index].local_IP_address.s_addr = INADDR_ANY;
+  fd_map_server[index].local_port = 0;
+}
+
+
+void SCTPasp__PT_PROVIDER::create_socket()
+{
+  struct sockaddr_in  sin;
+
+  log("Creating SCTP socket.");
+  if ((fd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP)) == -1)
+    error("Socket error: cannot create socket!");
+
+  if ( local_port_is_present ) {
+    sin.sin_family = AF_INET;
+    sin.sin_port = htons(local_port);
+    sin.sin_addr.s_addr = local_IP_address.s_addr;
+    log("Binding SCTP socket: bind address (%s):(%d)",
+      inet_ntoa(local_IP_address),local_port);
+    if (bind(fd, (struct sockaddr *)&sin, sizeof (sin)) == -1)
+    {
+      close(fd);
+      fd = -1;
+      error("Bind error!");
+    }
+  }
+
+  log("Setting SCTP socket options (initmsg).");
+  if (setsockopt(fd, IPPROTO_SCTP, SCTP_INITMSG, &initmsg,
+    sizeof(struct sctp_initmsg)) < 0)
+  {
+    TTCN_warning("Setsockopt error!");
+    errno = 0;
+  }
+
+  log("Setting SCTP socket options (events).");
+  if (setsockopt(fd, IPPROTO_SCTP, SCTP_EVENTS, &events, sizeof (events)) < 0)
+  {
+    TTCN_warning("Setsockopt error!");
+    errno = 0;
+  }
+}
+
+
+in_addr SCTPasp__PT_PROVIDER::get_in_addr(const char *hostname)
+{
+  struct hostent *h;
+  if ((h=gethostbyname(hostname)) == NULL)
+    error("Gethostbyname error!");
+  if(h->h_addr == NULL) error("Gethostbyname error! h->h_addr is NULL!");
+  return *((struct in_addr *)h->h_addr);
+}
+
+void SCTPasp__PT_PROVIDER::setNonBlocking(int fd)
+{
+  int flags = fcntl(fd, F_GETFL);
+  flags |= O_NONBLOCK;
+  int result = fcntl(fd, F_SETFL, flags);
+  if (result==-1) error("SCTPasp__PT::setNonBlocking(): Fcntl() error!");
+}
+
+
+}
diff --git a/SCTPasp_CNL113469/src/SCTPasp_PT.hh b/SCTPasp_CNL113469/src/SCTPasp_PT.hh
new file mode 100644
index 0000000..7d6311d
--- /dev/null
+++ b/SCTPasp_CNL113469/src/SCTPasp_PT.hh
@@ -0,0 +1,157 @@
+/******************************************************************************
+* Copyright (c) 2005, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Peter Dimitrov- initial implementation and initial documentation
+*  Adam Delic
+*  Eduard Czimbalmos
+*  Endre Kulcsar
+*  Gabor Bettesch
+*  Gabor Szalai
+*  Tamas Buti
+*  Zoltan Medve
+******************************************************************************/
+//
+//  File:               SCTPasp_PT.hh
+//  Description:        SCTPasp test port header
+//  Rev:                R11A
+//  Prodnr:             CNL 113 469
+// 
+
+
+#ifndef SCTPasp__PT_HH
+#define SCTPasp__PT_HH
+
+#include <TTCN3.hh>
+#include "SCTPasp_Types.hh"
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/sctp.h>
+
+namespace SCTPasp__Types {
+  class ASP__SCTP;
+  class ASP__SCTP__Connect;
+  class ASP__SCTP__ConnectFrom;
+  class ASP__SCTP__Listen;
+  
+  class SCTP__INIT;
+  class SCTP__EVENTS;
+  class SO__LINGER;
+  class SCTP__RTOINFO;
+  class SAC__STATE;
+  class SPC__STATE;
+  
+  class ASP__SCTP__SetSocketOptions;
+  class ASP__SCTP__Close;   
+  class ASP__SCTP__ASSOC__CHANGE;
+  class ASP__SCTP__PEER__ADDR__CHANGE;
+  class ASP__SCTP__SEND__FAILED;
+  class ASP__SCTP__REMOTE__ERROR;
+  class ASP__SCTP__SHUTDOWN__EVENT;
+  class ASP__SCTP__PARTIAL__DELIVERY__EVENT;
+  class ASP__SCTP__ADAPTION__INDICATION;
+  class ASP__SCTP__Connected;
+  class ASP__SCTP__SENDMSG__ERROR;
+  class ASP__SCTP__RESULT;
+}
+
+namespace SCTPasp__PortType {
+class SCTPasp__PT_PROVIDER : public PORT {
+public:
+  SCTPasp__PT_PROVIDER(const char *par_port_name = NULL);
+  ~SCTPasp__PT_PROVIDER();
+
+  void set_parameter(const char *parameter_name,
+    const char *parameter_value);
+
+  void Event_Handler(const fd_set *read_fds,
+    const fd_set *write_fds, const fd_set *error_fds,
+    double time_since_last_call);
+  
+protected:
+  void user_map(const char *system_port);
+  void user_unmap(const char *system_port);
+
+  void user_start();
+  void user_stop();
+
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP__Connect& send_par);
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP__ConnectFrom& send_par);
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP__Listen& send_par);
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP__SetSocketOptions& send_par);
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP__Close& send_par);
+  void outgoing_send(const SCTPasp__Types::ASP__SCTP& send_par);
+
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ASSOC__CHANGE& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PEER__ADDR__CHANGE& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SEND__FAILED& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__REMOTE__ERROR& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SHUTDOWN__EVENT& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__PARTIAL__DELIVERY__EVENT& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__ADAPTION__INDICATION& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__Connected& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__SENDMSG__ERROR& incoming_par) = 0;
+  virtual void incoming_message(const SCTPasp__Types::ASP__SCTP__RESULT& incoming_par) = 0;
+
+private:
+  enum return_value_t { WHOLE_MESSAGE_RECEIVED, PARTIAL_RECEIVE, EOF_OR_ERROR };
+  return_value_t getmsg(int fd, struct msghdr *msg);
+  void handle_event(void *buf);
+  void log(const char *fmt, ...);
+  void error(const char *fmt, ...);
+  void handle_event_reconnect(void *buf);
+  void forced_reconnect(int attempts);
+  // map operations
+  void map_put_item(int fd);
+  int  map_get_item(int fd);
+  void map_delete_item_fd(int fd); 
+  void map_delete_item(int index);
+
+  void map_put_item_server(int fd, struct in_addr local_IP_address, unsigned short local_port);
+  int  map_get_item_server(int fd);
+  void map_delete_item_fd_server(int fd); 
+  void map_delete_item_server(int index);
+  
+  void create_socket();
+  in_addr get_in_addr(const char *hostname);
+  void setNonBlocking(int fd);
+    
+  boolean simple_mode;
+  boolean reconnect;
+  int reconnect_max_attempts;
+  boolean server_mode;
+  boolean debug;
+  int server_backlog;
+  struct in_addr local_IP_address;
+  struct in_addr peer_IP_address;
+  unsigned short local_port;
+  unsigned short peer_port;
+
+  struct sctp_event_subscribe events;
+  struct sctp_initmsg  initmsg;
+  
+  boolean local_port_is_present;
+  boolean peer_IP_address_is_present;
+  boolean peer_port_is_present;
+
+  int fd;
+  fd_set readfds, writefds;
+  int receiving_fd;
+
+  struct fd_map_item;
+  fd_map_item *fd_map;
+  int list_len;
+
+  struct fd_map_server_item;
+  fd_map_server_item *fd_map_server;
+  int list_len_server;
+
+
+};
+}
+#endif
diff --git a/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn b/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn
new file mode 100644
index 0000000..27aae08
--- /dev/null
+++ b/SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn
@@ -0,0 +1,62 @@
+/******************************************************************************
+* Copyright (c) 2005, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Peter Dimitrov- initial implementation and initial documentation
+*  Adam Delic
+*  Eduard Czimbalmos
+*  Endre Kulcsar
+*  Gabor Bettesch
+*  Gabor Szalai
+*  Tamas Buti
+*  Zoltan Medve
+******************************************************************************/
+//
+//  File:               SCTPasp_PortType.ttcn
+//  Description:        SCTPasp testport definition file
+//  Rev:                R11A
+//  Prodnr:             CNL 113 469
+//
+
+module SCTPasp_PortType
+{
+
+import from SCTPasp_Types all;
+
+//=========================================================================
+//Port Types
+//=========================================================================
+
+type port SCTPasp_PT message 
+{
+  inout ASP_SCTP;
+  
+  out ASP_SCTP_Connect;
+  out ASP_SCTP_ConnectFrom;
+  out ASP_SCTP_Listen;
+  out ASP_SCTP_SetSocketOptions;
+  out ASP_SCTP_Close;
+   
+  in ASP_SCTP_ASSOC_CHANGE;
+  in ASP_SCTP_PEER_ADDR_CHANGE;
+  in ASP_SCTP_SEND_FAILED;
+  in ASP_SCTP_REMOTE_ERROR;
+  in ASP_SCTP_SHUTDOWN_EVENT;
+  in ASP_SCTP_PARTIAL_DELIVERY_EVENT;
+  in ASP_SCTP_ADAPTION_INDICATION;
+
+  in ASP_SCTP_Connected;
+  in ASP_SCTP_SENDMSG_ERROR;
+  in ASP_SCTP_RESULT;
+
+} with { extension "provider" }
+
+}//end of module
+with {
+extension "version R11A"
+}
+
diff --git a/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn b/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn
new file mode 100644
index 0000000..f10fc58
--- /dev/null
+++ b/SCTPasp_CNL113469/src/SCTPasp_Types.ttcn
@@ -0,0 +1,201 @@
+/******************************************************************************
+* Copyright (c) 2005, 2014  Ericsson AB
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Peter Dimitrov- initial implementation and initial documentation
+*  Adam Delic
+*  Eduard Czimbalmos
+*  Endre Kulcsar
+*  Gabor Bettesch
+*  Gabor Szalai
+*  Tamas Buti
+*  Zoltan Medve
+******************************************************************************/
+//
+//  File:               SCTPasp_Types.ttcn
+//  Description:        SCTP ASP definition file
+//  Rev:                R11A
+//  Prodnr:             CNL 113 469
+//
+
+
+module SCTPasp_Types
+{
+
+//=========================================================================
+// Data Types
+//=========================================================================
+
+type octetstring PDU_SCTP;
+
+type record ASP_SCTP
+{
+  integer client_id optional,
+  integer sinfo_stream,
+  integer sinfo_ppid,
+  PDU_SCTP data
+}
+
+
+type record ASP_SCTP_Connect
+{
+  charstring peer_hostname optional,
+  integer peer_portnumber (1..65535) optional
+}
+
+
+type record ASP_SCTP_ConnectFrom
+{
+  charstring local_hostname optional,
+  integer local_portnumber (1..65535),
+  charstring peer_hostname optional,
+  integer peer_portnumber (1..65535) optional
+}
+
+
+type record ASP_SCTP_Listen
+{
+  charstring local_hostname optional,
+  integer local_portnumber (1..65535)
+}
+
+
+type record SCTP_INIT
+{
+  integer sinit_num_ostreams,
+  integer sinit_max_instreams,
+  integer sinit_max_attempts,
+  integer sinit_max_init_timeo
+}
+
+type record SCTP_EVENTS
+{
+  boolean sctp_data_io_event,
+  boolean sctp_association_event,
+  boolean sctp_address_event,
+  boolean sctp_send_failure_event,
+  boolean sctp_peer_error_event,
+  boolean sctp_shutdown_event,
+  boolean sctp_partial_delivery_event,
+  boolean sctp_adaption_layer_event
+}
+
+type record SO_LINGER
+{
+  integer  l_onoff,
+  integer l_linger
+}
+
+type record SCTP_RTOINFO
+{
+  integer client_id,
+  integer srto_initial,
+  integer srto_max,
+  integer srto_min
+}
+
+type union ASP_SCTP_SetSocketOptions
+{
+  SCTP_INIT Sctp_init,
+  SCTP_EVENTS Sctp_events,
+  SO_LINGER So_linger,
+  SCTP_RTOINFO Sctp_rtoinfo
+}
+
+
+type record ASP_SCTP_Close
+{
+  integer client_id optional
+}
+
+
+type enumerated SAC_STATE
+{
+  SCTP_COMM_UP, SCTP_COMM_LOST, SCTP_RESTART, 
+  SCTP_SHUTDOWN_COMP, SCTP_CANT_STR_ASSOC, SCTP_UNKNOWN_SAC_STATE
+}
+
+type record ASP_SCTP_ASSOC_CHANGE
+{
+  integer client_id,
+  SAC_STATE sac_state
+}
+
+
+type enumerated SPC_STATE
+{
+  SCTP_ADDR_AVAILABLE, SCTP_ADDR_UNREACHABLE, SCTP_ADDR_REMOVED,
+  SCTP_ADDR_ADDED, SCTP_ADDR_MADE_PRIM, SCTP_ADDR_CONFIRMED, SCTP_UNKNOWN_SPC_STATE
+}
+
+type record ASP_SCTP_PEER_ADDR_CHANGE
+{
+  integer client_id,
+  SPC_STATE spc_state
+}
+
+
+type record ASP_SCTP_SEND_FAILED
+{
+  integer client_id
+}
+
+
+type record ASP_SCTP_REMOTE_ERROR
+{
+  integer client_id
+}
+
+
+type record ASP_SCTP_SHUTDOWN_EVENT
+{
+  integer client_id
+}
+
+
+type record ASP_SCTP_PARTIAL_DELIVERY_EVENT
+{
+  integer client_id
+}
+
+
+type record ASP_SCTP_ADAPTION_INDICATION
+{
+  integer client_id
+}
+
+
+type record ASP_SCTP_Connected
+{
+  integer     client_id,
+  charstring  local_hostname,
+  integer     local_portnumber (1..65535),
+  charstring  peer_hostname,
+  integer     peer_portnumber (1..65535)
+}
+
+
+type record ASP_SCTP_SENDMSG_ERROR
+{
+  integer client_id optional,
+  integer sinfo_stream,
+  integer sinfo_ppid,
+  PDU_SCTP data
+}
+
+type record ASP_SCTP_RESULT
+{
+  integer client_id optional,
+  boolean error_status,
+  charstring error_message optional
+}
+
+}//end of module
+with {
+extension "version R11A"
+}
+
diff --git a/bin/General_Types.ttcn b/bin/General_Types.ttcn
new file mode 120000
index 0000000..206f0e3
--- /dev/null
+++ b/bin/General_Types.ttcn
@@ -0,0 +1 @@
+../COMMON/src/General_Types.ttcn
\ No newline at end of file
diff --git a/bin/M3UA_Emulation.ttcn b/bin/M3UA_Emulation.ttcn
new file mode 120000
index 0000000..920cdcf
--- /dev/null
+++ b/bin/M3UA_Emulation.ttcn
@@ -0,0 +1 @@
+../M3UA_CNL113537/src/M3UA_Emulation.ttcn
\ No newline at end of file
diff --git a/bin/M3UA_Types.ttcn b/bin/M3UA_Types.ttcn
new file mode 120000
index 0000000..3b60f72
--- /dev/null
+++ b/bin/M3UA_Types.ttcn
@@ -0,0 +1 @@
+../M3UA_CNL113536/src/M3UA_Types.ttcn
\ No newline at end of file
diff --git a/bin/MTP3asp_PortType.ttcn b/bin/MTP3asp_PortType.ttcn
new file mode 120000
index 0000000..9f2cae6
--- /dev/null
+++ b/bin/MTP3asp_PortType.ttcn
@@ -0,0 +1 @@
+../MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn
\ No newline at end of file
diff --git a/bin/MTP3asp_Types.ttcn b/bin/MTP3asp_Types.ttcn
new file mode 120000
index 0000000..ef67545
--- /dev/null
+++ b/bin/MTP3asp_Types.ttcn
@@ -0,0 +1 @@
+../MTP3asp_CNL113337/src/MTP3asp_Types.ttcn
\ No newline at end of file
diff --git a/bin/Makefile b/bin/Makefile
new file mode 100644
index 0000000..120c4ec
--- /dev/null
+++ b/bin/Makefile
@@ -0,0 +1,190 @@
+# This Makefile was generated by the Makefile Generator
+# of the TTCN-3 Test Executor version CRL 113 200/6 R1A
+# for Elemer Lelik (ethlel@esekilxxen1846) on Wed Apr 12 09:00:44 2017
+
+# Copyright (c) 2000-2017 Ericsson Telecom AB
+
+# The following make commands are available:
+# - make, make all      Builds the executable test suite.
+# - make archive        Archives all source files.
+# - make check          Checks the semantics of TTCN-3 and ASN.1modules.
+# - make port           Generates port skeletons.
+# - make clean          Removes all generated files.
+# - make compile        Translates TTCN-3 and ASN.1 modules to C++.
+# - make dep            Creates/updates dependency list.
+# - make executable     Builds the executable test suite.
+# - make library        Builds the library archive.
+# - make objects        Builds the object files without linking the executable.
+#
+# Set these variables...
+#
+
+# The path of your TTCN-3 Test Executor installation:
+# Uncomment this line to override the environment variable.
+# TTCN3_DIR = 
+
+# Your platform: (SOLARIS, SOLARIS8, LINUX, FREEBSD or WIN32)
+PLATFORM = LINUX
+
+# Your C++ compiler:
+# (if you change the platform, you may need to change the compiler)
+CXX = g++ 
+
+# Flags for the C++ preprocessor (and makedepend as well):
+CPPFLAGS = -D$(PLATFORM) -I$(TTCN3_DIR)/include
+
+# Flags for the C++ compiler:
+CXXFLAGS = -Wall  
+
+# Flags for the linker:
+LDFLAGS = 
+
+ifeq ($(PLATFORM), WIN32)
+# Silence linker warnings.
+LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc
+endif
+
+# Utility to create library files
+AR = ar
+ARFLAGS = 
+
+# Flags for the TTCN-3 and ASN.1 compiler:
+COMPILER_FLAGS = -L 
+
+# Execution mode: (either ttcn3 or ttcn3-parallel)
+TTCN3_LIB = ttcn3-parallel
+
+# The path of your OpenSSL installation:
+# If you do not have your own one, leave it unchanged.
+OPENSSL_DIR = $(TTCN3_DIR)
+
+# The path of your libxml2 installation:
+# If you do not have your own one, leave it unchanged.
+XMLDIR = $(TTCN3_DIR)
+
+# Directory to store the archived source files:
+# Note: you can set any directory except ./archive
+ARCHIVE_DIR = backup
+
+#
+# You may change these variables. Add your files if necessary...
+#
+
+# TTCN-3 modules of this project:
+TTCN3_MODULES = General_Types.ttcn M3UA_Emulation.ttcn M3UA_Types.ttcn MTP3asp_PortType.ttcn MTP3asp_Types.ttcn SCCP_Emulation.ttcn SCCP_Mapping.ttcn SCCP_Testcases.ttcn SCCP_Types.ttcn SCCPasp_Types.ttcn SCTPasp_PortType.ttcn SCTPasp_Types.ttcn
+
+# ASN.1 modules of this project:
+ASN1_MODULES =
+
+# C++ source & header files generated from the TTCN-3 & ASN.1 modules of
+# this project:
+GENERATED_SOURCES = General_Types.cc M3UA_Emulation.cc M3UA_Types.cc MTP3asp_PortType.cc MTP3asp_Types.cc SCCP_Emulation.cc SCCP_Mapping.cc SCCP_Testcases.cc SCCP_Types.cc SCCPasp_Types.cc SCTPasp_PortType.cc SCTPasp_Types.cc
+GENERATED_HEADERS = General_Types.hh M3UA_Emulation.hh M3UA_Types.hh MTP3asp_PortType.hh MTP3asp_Types.hh SCCP_Emulation.hh SCCP_Mapping.hh SCCP_Testcases.hh SCCP_Types.hh SCCPasp_Types.hh SCTPasp_PortType.hh SCTPasp_Types.hh
+
+# C/C++ Source & header files of Test Ports, external functions and
+# other modules:
+USER_SOURCES = SCTPasp_PT.cc
+USER_HEADERS = SCTPasp_PT.hh
+
+# Object files of this project that are needed for the executable test suite:
+OBJECTS = $(GENERATED_OBJECTS) $(USER_OBJECTS)
+
+GENERATED_OBJECTS = General_Types.o M3UA_Emulation.o M3UA_Types.o MTP3asp_PortType.o MTP3asp_Types.o SCCP_Emulation.o SCCP_Mapping.o SCCP_Testcases.o SCCP_Types.o SCCPasp_Types.o SCTPasp_PortType.o SCTPasp_Types.o
+
+USER_OBJECTS = SCTPasp_PT.o
+
+# Other files of the project (Makefile, configuration files, etc.)
+# that will be added to the archived source files:
+OTHER_FILES = Makefile
+
+# The name of the executable test suite:
+EXECUTABLE = SCCP_Test
+
+
+
+LIBRARY = lib$(EXECUTABLE).a
+
+TARGET = $(EXECUTABLE)
+
+#
+# Do not modify these unless you know what you are doing...
+# Platform specific additional libraries:
+#
+SOLARIS_LIBS = -lsocket -lnsl -lxml2 -lresolv
+SOLARIS8_LIBS = -lsocket -lnsl -lxml2 -lresolv
+LINUX_LIBS = -lxml2 -lpthread -lrt
+FREEBSD_LIBS = -lxml2
+WIN32_LIBS = -lxml2
+
+#
+# Rules for building the executable...
+#
+
+all: $(TARGET) ;
+
+executable: $(EXECUTABLE) ;
+
+library: $(LIBRARY) ;
+
+objects: $(OBJECTS) compile;
+
+$(EXECUTABLE): $(OBJECTS)
+	if $(CXX) $(LDFLAGS) -o $@ $(OBJECTS) \
+	-L$(TTCN3_DIR)/lib -l$(TTCN3_LIB) \
+	-L$(OPENSSL_DIR)/lib -lcrypto \
+	-L$(XMLDIR)/lib $($(PLATFORM)_LIBS); \
+	then : ; else $(TTCN3_DIR)/bin/titanver $(OBJECTS); exit 1; fi
+
+$(LIBRARY): $(OBJECTS)
+	$(AR) -r $(ARFLAGS) $(LIBRARY) $(OBJECTS)
+
+%.o: %.c $(GENERATED_HEADERS)
+	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+%.o: %.cc $(GENERATED_HEADERS)
+	$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) -o $@ $<
+
+$(GENERATED_SOURCES) $(GENERATED_HEADERS): compile
+	@if [ ! -f $@ ]; then rm -f compile; $(MAKE) compile; fi
+
+check: $(TTCN3_MODULES) $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -s $(COMPILER_FLAGS) \
+	$(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+
+port: $(TTCN3_MODULES)  $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler -t $(COMPILER_FLAGS) \
+	$(TTCN3_MODULES) $(PREPROCESSED_TTCN3_MODULES) $(ASN1_MODULES)
+
+compile: $(TTCN3_MODULES)  $(ASN1_MODULES)
+	$(TTCN3_DIR)/bin/compiler $(COMPILER_FLAGS) \
+	$(TTCN3_MODULES) $(ASN1_MODULES) - $?
+	touch $@
+
+clean:
+	-rm -f $(EXECUTABLE) $(LIBRARY) $(OBJECTS) $(GENERATED_HEADERS) \
+	$(GENERATED_SOURCES) compile \
+	tags *.log
+
+dep: $(GENERATED_SOURCES) $(USER_SOURCES) ;
+	makedepend $(CPPFLAGS) -DMAKEDEPEND_RUN $(GENERATED_SOURCES) $(USER_SOURCES)
+
+archive:
+	mkdir -p $(ARCHIVE_DIR)
+	tar -cvhf - $(TTCN3_MODULES) $(ASN1_MODULES) \
+	$(USER_HEADERS) $(USER_SOURCES) $(OTHER_FILES) \
+	| gzip >$(ARCHIVE_DIR)/`basename $(TARGET) .exe`-`date '+%y%m%d-%H%M'`.tgz
+
+diag:
+	$(TTCN3_DIR)/bin/compiler -v 2>&1
+	$(TTCN3_DIR)/bin/mctr_cli -v 2>&1
+	$(CXX) -v 2>&1
+	$(AR) -V 2>&1
+	@echo TTCN3_DIR=$(TTCN3_DIR)
+	@echo OPENSSL_DIR=$(OPENSSL_DIR)
+	@echo XMLDIR=$(XMLDIR)
+	@echo PLATFORM=$(PLATFORM)
+
+#
+# Add your rules here if necessary...
+#
+
diff --git a/bin/SCCP_Emulation.ttcn b/bin/SCCP_Emulation.ttcn
new file mode 120000
index 0000000..56f9548
--- /dev/null
+++ b/bin/SCCP_Emulation.ttcn
@@ -0,0 +1 @@
+../SCCP_CNL113341/src/SCCP_Emulation.ttcn
\ No newline at end of file
diff --git a/bin/SCCP_Mapping.ttcn b/bin/SCCP_Mapping.ttcn
new file mode 120000
index 0000000..49e5098
--- /dev/null
+++ b/bin/SCCP_Mapping.ttcn
@@ -0,0 +1 @@
+../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp
\ No newline at end of file
diff --git a/bin/SCCP_Mapping.ttcnpp b/bin/SCCP_Mapping.ttcnpp
new file mode 120000
index 0000000..49e5098
--- /dev/null
+++ b/bin/SCCP_Mapping.ttcnpp
@@ -0,0 +1 @@
+../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp
\ No newline at end of file
diff --git a/bin/SCCP_Testcases.cfg b/bin/SCCP_Testcases.cfg
new file mode 120000
index 0000000..34a3574
--- /dev/null
+++ b/bin/SCCP_Testcases.cfg
@@ -0,0 +1 @@
+../SCCP_Test/SCCP_Testcases.cfg
\ No newline at end of file
diff --git a/bin/SCCP_Testcases.ttcn b/bin/SCCP_Testcases.ttcn
new file mode 120000
index 0000000..044b425
--- /dev/null
+++ b/bin/SCCP_Testcases.ttcn
@@ -0,0 +1 @@
+../SCCP_Test/SCCP_Testcases.ttcn
\ No newline at end of file
diff --git a/bin/SCCP_Types.ttcn b/bin/SCCP_Types.ttcn
new file mode 120000
index 0000000..79ab3ba
--- /dev/null
+++ b/bin/SCCP_Types.ttcn
@@ -0,0 +1 @@
+../SCCP_CNL113341/src/SCCP_Types.ttcn
\ No newline at end of file
diff --git a/bin/SCCPasp_Types.ttcn b/bin/SCCPasp_Types.ttcn
new file mode 120000
index 0000000..1d80a1d
--- /dev/null
+++ b/bin/SCCPasp_Types.ttcn
@@ -0,0 +1 @@
+../SCCP_CNL113341/src/SCCPasp_Types.ttcn
\ No newline at end of file
diff --git a/bin/SCTPasp_PT.cc b/bin/SCTPasp_PT.cc
new file mode 120000
index 0000000..2334484
--- /dev/null
+++ b/bin/SCTPasp_PT.cc
@@ -0,0 +1 @@
+../SCTPasp_CNL113469/src/SCTPasp_PT.cc
\ No newline at end of file
diff --git a/bin/SCTPasp_PT.hh b/bin/SCTPasp_PT.hh
new file mode 120000
index 0000000..5ba6a79
--- /dev/null
+++ b/bin/SCTPasp_PT.hh
@@ -0,0 +1 @@
+../SCTPasp_CNL113469/src/SCTPasp_PT.hh
\ No newline at end of file
diff --git a/bin/SCTPasp_PortType.ttcn b/bin/SCTPasp_PortType.ttcn
new file mode 120000
index 0000000..798fd7b
--- /dev/null
+++ b/bin/SCTPasp_PortType.ttcn
@@ -0,0 +1 @@
+../SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn
\ No newline at end of file
diff --git a/bin/SCTPasp_Types.ttcn b/bin/SCTPasp_Types.ttcn
new file mode 120000
index 0000000..e067b94
--- /dev/null
+++ b/bin/SCTPasp_Types.ttcn
@@ -0,0 +1 @@
+../SCTPasp_CNL113469/src/SCTPasp_Types.ttcn
\ No newline at end of file
diff --git a/bin/install.script b/bin/install.script
new file mode 100755
index 0000000..d6808cc
--- /dev/null
+++ b/bin/install.script
@@ -0,0 +1,34 @@
+#!/bin/sh 
+
+
+
+ln -sf ../COMMON/src/General_Types.ttcn                     .
+
+#M3UA protocol module
+ln -sf ../M3UA_CNL113536/src/M3UA_Types.ttcn                     .
+#M3UA Emulator
+ln -sf ../M3UA_CNL113537/src/M3UA_Emulation.ttcn                     .
+
+
+#MTP3 test port (partly)
+
+ln -sf ../MTP3asp_CNL113337/src/MTP3asp_Types.ttcn                   .
+ln -sf ../MTP3asp_CNL113337/src/MTP3asp_PortType.ttcn                .
+
+#SCCP Emulator + protocol module
+
+ln -sf ../SCCP_CNL113341/src/SCCPasp_Types.ttcn                   .
+ln -sf ../SCCP_CNL113341/src/SCCP_Types.ttcn                   .
+ln -sf ../SCCP_CNL113341/src/SCCP_Mapping.ttcnpp                   .
+ln -sf ../SCCP_CNL113341/src/SCCP_Emulation.ttcn                   .
+
+#SCTP test port 
+ln -sf ../SCTPasp_CNL113469/src/SCTPasp_Types.ttcn                   .
+ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PortType.ttcn                   .
+ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PT.hh                   .
+ln -sf ../SCTPasp_CNL113469/src/SCTPasp_PT.cc                   .
+
+
+#Test cases
+ln -sf ../SCCP_Test/SCCP_Testcases.ttcn                     .
+ln -sf ../SCCP_Test/SCCP_Testcases.cfg                     .