///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// 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

